Spring bean如何处理并发性

Raj*_*kar 17 spring javabeans thread-safety

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

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

Tom*_*icz 12

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

也可以看看:

  • 是的。但是,当我们的 bean 有字段时,我们如何最好地处理并发性呢? (2认同)

her*_*ung 5

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


小智 5

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

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