Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧和螺纹安全_Java_Spring_Multithreading - Fatal编程技术网

Java 弹簧和螺纹安全

Java 弹簧和螺纹安全,java,spring,multithreading,Java,Spring,Multithreading,我正在研究java的包java.util.concurrent,我想到了以下问题:当使用Spring框架时,我应该担心多线程场景吗 例如,我有一个基于Spring Boot的API。我的一个rest服务更新ArrayList。但是ArrayList不是线程安全的,这可能会导致数据不一致。但是,我使用的是Spring框架 问题是:我是否必须将当前的ArrayList更改为java的并发集合之一,或者Spring框架本身是线程安全的,我不应该担心多线程场景?您的REST服务应该编写成线程安全的。这意

我正在研究java的包java.util.concurrent,我想到了以下问题:当使用Spring框架时,我应该担心多线程场景吗

例如,我有一个基于Spring Boot的API。我的一个rest服务更新ArrayList。但是ArrayList不是线程安全的,这可能会导致数据不一致。但是,我使用的是Spring框架


问题是:我是否必须将当前的ArrayList更改为java的并发集合之一,或者Spring框架本身是线程安全的,我不应该担心多线程场景?您的REST服务应该编写成线程安全的。这意味着没有可变的私有数据成员。如果是这样,你就安全了

如果您的所有方法都使用方法范围变量,那么您是线程安全的

您应该知道,应用服务器将为传入的每个HTTP请求生成一个线程。如果您将服务编写为单线程服务,那么您就可以了

您应该始终担心多线程场景

如果您的REST服务必须与数据库交互,则不应共享连接。您需要一个池数据源,该数据源为每个请求签出一个连接,在方法作用域中使用该连接,并将其返回到池。JDBC连接不是线程安全的,但您可以避免它,因为您将它们集中在一起。

SpringMVC(SpringBootRestServices)基于ServletAPI。Serlet是多线程的,因此必须注意并发性

但这取决于你是如何编程的。如果变量是类变量/类成员,则需要注意并发性,但如果变量是在方法中声明的,则这是线程安全的