春季单例豆线安全吗?

2022-09-01 02:04:56

我想知道Spring单例豆是否是线程安全的,如果是,那么为什么,如果不是,那么为什么?

由于我是春季的初学者,所以帮助将不胜感激。


答案 1

不。这两个概念甚至没有关系。

单例是关于创造的。此设计模式可确保只创建类的一个实例。

线程安全与执行有关。引用维基百科的话:

如果一段代码仅以保证多个线程同时安全执行的方式操作共享数据结构,则该代码段是线程安全的。

因此,最终线程安全性仅取决于代码和代码。这就是为什么Spring Bean本身不是线程安全的原因。


答案 2

我有不同的看法:春季单一豆子创建一次,在任何时间点只能有一个实例可用。

假设您有一个实例变量,该变量在非同步方法中进行了修改。在多线程环境中,所有线程都会分配到同一个类实例,2个并发线程可以更新/更改实例变量,这可能会导致意外情况。Singleton Bean不提供线程安全性,现在您知道实例变量的使用可能会导致意外的结果,您有2个选项来解决相同的问题:

  1. 不要在多线程环境中使用实例变量。或
  2. 在修改实例变量的任何位置的方法上使用同步块/关键字,以避免意外结果。

推荐