单例模式实现方式

来源:互联网 发布:网络招聘注意事项 编辑:程序博客网 时间:2024/05/02 00:29
public class Singleton {  private Singleton() {}  // Lazy initialization holder class idiom for static fields  private static class InstanceHolder {   private static final Singleton instance = new Singleton();  }  public static Singleton getSingleton() {     return InstanceHolder.instance;   }}
    public class LazySingleton {          private int someField;          private static LazySingleton instance;          private LazySingleton() {              this.someField = new Random().nextInt(200)+1;         // (1)          }          public static LazySingleton getInstance() {              if (instance == null) {                               // (2)                  synchronized(LazySingleton.class) {               // (3)                      if (instance == null) {                       // (4)                          instance = new LazySingleton();           // (5)                      }                  }              }              return instance;                                      // (6)          }          public int getSomeField() {              return this.someField;                                // (7)          }      }  

上面这种方式完美,下面这种方式极小可能会出现happen—before问题,导致调用getSomeField()方法返回0

0 0