`
sunxboy
  • 浏览: 2829728 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Double-Checked Locking using Volatile

阅读更多

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;
     }
 }

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics