Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Spring - Fatal编程技术网

Java 春单豆

Java 春单豆,java,multithreading,spring,Java,Multithreading,Spring,我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。 我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务 请告诉我。那将是一个巨大的开销。如果您将代码正确地设置为线程安全的,那么没有理由认为每个请求都需要自己的服务bean,这通常意味着不在bean

我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。 我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务


请告诉我。

那将是一个巨大的开销。如果您将代码正确地设置为线程安全的,那么没有理由认为每个请求都需要自己的服务bean,这通常意味着不在bean上保留任何每个请求的状态。

即使创建了一个新线程(或根据配置重新使用),控制器和服务实例也会重新使用。如果控制器和服务设计得很好,它们在请求方面可能是无状态的,并且是不可变的,这将使它们具有线程安全性。当对象的状态在创建后不会改变时,它也会导致对象创建量大大减少。

我认为这实际上取决于是否需要在bean中存储任何状态。通常,我编写我的单例,以便它们不包含其中的任何状态,并且只用于计算业务逻辑。如果不需要管理状态,那么可以让所有线程共享一个单例实例。


看看这个。我相信这会有帮助。

对象实例化很快。实例化一个合理的服务或控制器的开销通常不是一个性能问题,线程安全问题也较少。特别是对于服务,没有理由有多个副本(一般来说),对于控制器,参数没有那么明确。@DaveNewton实例化很快。布线不是。而且,我想你应该检查一下请求和原型范围之间的差异。感谢提供链接,它回答了我的问题。不客气!!如果您对spring/java中的任何其他主题有疑问,请提出请求,我将就此主题写一篇文章。