Spring bean如何处理并发性

时间:2012-12-08 10:46:13

标签: spring thread-safety javabeans

我的网络应用程序使用spring IOC。因此,我的所有spring bean都将是singleton(默认情况下)。如果两个请求尝试访问单个类的两个不同方法。例如:MySpringBean是一个有两个方法searchRecordinsertRecord方法的类。如果同时在两个方法中尝试通过同一个bean访问。

当两个请求尝试访问两个不同的方法但是通过相同的spring bean时,同一个spring bean如何同时可用于两个客户端,或者它是并发问题。因为spring bean是单例,所以无法形成新实例。在这种情况下,这是如何工作的?

4 个答案:

答案 0 :(得分:11)

您必须首先了解并发何时会导致问题。如果您的Spring bean是无状态的(它没有任何字段,所有字段都是final或者所有字段只分配一次),多个线程可以安全地使用相同的bean,甚至是相同的方法。

另见:

答案 1 :(得分:5)

如果bean是单例,那么Spring将在任何线程中为您提供相同的实例。由你决定使这个bean线程安全。因为它是一个单身人士,所以你最好不要让这个班级无国籍。

答案 2 :(得分:5)

正如其他人已经建议的那样,Spring将在“singleton”bean的情况下为所有线程提供相同的实例。

您需要了解的是,线程通过执行代码来完成系统中的所有工作,而对象提供状态和行为(代码)。因此,多个线程(在您的情况下为请求)确实可以在单例bean中同时运行相同的方法。您可以像Tomasz建议的那样使这些bean无状态,或者使它们“线程安全”。

答案 3 :(得分:0)

Java单例和spring单例不同。 Spring单例范围将在上下文中可用。

Java单例作用域将在JVM类加载器中。因此,并发请求仅可能通过spring上下文