roc*_*lls 4 java spring dependency-injection thread-safety
public class Test{
private First first;
private Second second;
public void setFirst(First first){
this.first = first;
}
public First getFirst(){
return first;
}
// same approach for second
}
Run Code Online (Sandbox Code Playgroud)
如果我通过弹簧注射注入实例,它是否是线程安全的?如果没有,如何使其线程安全?我用谷歌搜索并发现矛盾的回答,无法得出任何结论.请建议.提前致谢.-RW
如果你在谈论我认为你在谈论的内容,那么这是一个有趣的讨论.
从技术上讲,因为setFirst()和getFirst()不synchronized,那么它可能对setFirst()注入的线程1一个对象,getFirst()对线程2返回不同的对象的Java内存模型保留对本"最终一致"的权利,因为他们说.
因此,在启动期间(或服务器的内部启动线程)配置其bean图的Spring的情况下,由于缺乏同步,HTTP请求线程(例如)可能无法正确地看到该bean图.
注意:这与并发访问无关.即使在Spring初始化之后进入HTTP请求,Java内存模型也不能保证这些线程会看到正确的数据.
在实践中,这种情况从未发生过(至少,我从未见过它).缺少同步只是并发线程的一个问题,这不是问题.
所以这真的只是一个学术论点.
如果这不是你所说的话,我道歉.不过,这仍然是一个有趣的想法.
| 归档时间: |
|
| 查看次数: |
4342 次 |
| 最近记录: |