JDK5 and later extends the semantics for volatile so that the system will not allow a write of a volatile to be reordered with respect to any previous read or write, and a read of a volatile cannot be reordered with respect to any following read or write. See this entry in Jeremy Manson's blog for more details.

With this change, the Double-Checked Locking idiom can be made to work by declaring the helper field to be volatile. Thisdoes not work under JDK4 and earlier.

 

//Works with acquire/release semantics for volatile
//Broken under current semantics for volatile
class Foo {
     private volatile Helper helper = null;
     public Helper getHelper() {
         if (helper == null) {
             synchronized(this) {
                 if (helper == null)
                     helper = new Helper();
             }
         }
         return helper;
     }
 }

 

 

 

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐