关于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;
}
回复
阅读 714
1 个回答
✓ 已被采纳

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

宣传栏