关于volatitle的应用

最忙碌的语言
  • 87

在高并发的情况下,我一直没有想明白类的初始化是不是安全的?
问题1:在对象初始化多实例的,书上意思是说,下边的代码也是线程发布不安全的;
具体描述是:由于没有使用同步来确保ReWuService对象对其他线程可见,因此该对象未被正确的发布,是不是需要加volatile来保证可见性?

问题2:这个对象要是spring容器管理,会不会避免上述的问题??
public class ReWuService {

private ReWuDao reWuDao;
private ComboPooledDataSource dataSource;
private ThreadLocal<Connection> threadLocal=new ThreadLocal<>();

public ReWuService(ReWuDao reWuDao,ComboPooledDataSource dataSource){
    this.reWuDao=reWuDao;
    this.dataSource=dataSource;
}
回复
阅读 751
1 个回答
✓ 已被采纳

书上用双重检查锁举的反例,最好是用final,能够避免此问题。如果调用线程没有保护好,可能会出现重排序,拿到一个没有初始化完全的对象。使用spring 是没有这种问题的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏