Double-Checked Locking using Volatile

1122 단어 Blog
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;
     }
 }

 
 

좋은 웹페이지 즐겨찾기