Java Spring 中的单例 Bean 并发



Java Spring bean 默认作用域是单例。如果我们创建一个带有类变量的服务(bean(,该类变量可能会在内部方法中发生变化,则该 bean 对不同线程的使用可能会导致意外错误。那么如何避免这种情况呢?

单例模式确保 JVM 只有此类的一个实例可用(对于 Java,每个类加载器可以有多个实例/如果是 spring,则每个应用程序上下文(。这意味着本质上需要一个全局状态进入应用程序。

这就是为什么我们希望 Singleton 类是无状态的,因为如果我们有任何线程访问它,那么我们不希望内部变量因为缺乏并发控制而发生变异。

如果您想保持状态,您可以稍后根据您的要求确定春豆的范围,例如请求、原型。这些作用域将有助于达到根据请求/Bean 保持状态的目的。

最新更新