Java 以线程安全的方式更新Spring管理的单例bean依赖项
我有一个Spring管理的单例bean,它需要根据特定条件更新其依赖关系:Java 以线程安全的方式更新Spring管理的单例bean依赖项,java,spring,thread-safety,inversion-of-control,synchronized,Java,Spring,Thread Safety,Inversion Of Control,Synchronized,我有一个Spring管理的单例bean,它需要根据特定条件更新其依赖关系: @Component public class BeanClass { private DependencyClass dependency; public void beanMethod() { // if dependency is not initialised or otherwise requires renewal (becomes stale) if (c
@Component
public class BeanClass {
private DependencyClass dependency;
public void beanMethod() {
// if dependency is not initialised or otherwise requires renewal (becomes stale)
if (condition) {
dependency = renewDependency();
}
// use dependency
}
}
这个bean
用于高度多线程的环境中,我想确保在一个线程中更新dependency
时(可能是一个昂贵的过程),没有其他线程可以使用dependency
或再次进入更新条件逻辑
我知道我有几个选择,我应该使用其中的一些,或者结合使用其中的一些:
- 将
修饰符添加到易失性
。我的理解是,这只是对编译器的一个提示,并不能单独解决问题依赖项
- 将
与if(条件)
打包。我使用什么作为锁定对象<代码>依赖项自身、synchronized
或此
类字段私有最终对象锁=新对象()
- 将
提取到方法中,并将if(condition)
放在其上。它是否与上面的synchronized
选项相同synchronized(此)
我想知道Spring的IoC容器、代理或任何东西中是否有任何魔法可以简化这一点。当不更新依赖项时,是否允许多个线程同时使用它?是的,您绝对知道应用程序可以生成的最大线程数吗(或者线程池的大小)?@takanuva15这是一个高度动态的环境,不确定。这有什么关系?