单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...
生活随笔
收集整理的這篇文章主要介紹了
单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先這兩種方式都是延遲初始化機制,就是當要用到的時候再去初始化。
但是Effective Java書中說過:除非絕對必要,否則就不要這么做。
1. DCL (double checked locking)雙重檢查:
如果出于性能的考慮而需要對實例域(注意這個屬性并沒有被static修飾)使用延遲初始化,就使用雙重檢查模式
public class Singleton {private volatile Singleton uniqueInstance;private Singleton(){}public static Singleton getInstance(){if(uniqueInstance == null){ //#1synchronized(Singleton.class){ //#2if(uniqueInstance == null){ //#3uniqueInstance = new Singleton(); //#4System.out.println(Thread.currentThread().getName() + ": uniqueInstance is initalized..."); //#5.1} else {System.out.println(Thread.currentThread().getName() + ": uniqueInstance is not null now..."); //#5.2 }}}return uniqueInstance;} }
?
2. lazy initialization holder class(靜態內部類):
如果出于性能的考慮而需要對靜態域(注意這個屬性被static修飾)使用延遲初始化,就使用lazy initialization holder class模式。
1 public class Singleton { 2 3 private static class SingletonHolder { 4 /** 5 * 靜態初始化器,由JVM來保證線程安全 6 */ 7 private static Singleton instance = new Singleton(); 8 } 9 10 private Singleton(){ 11 } 12 13 public static Singleton getInstance(){ 14 return SingletonHolder.instance; 15 } 16 }
?
最后,以上兩種方法都不是實現單例模式的最好方式,最好的是枚舉模式,coming soon...
?
轉載于:https://www.cnblogs.com/damonhuang/p/5439655.html
總結
以上是生活随笔為你收集整理的单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#属性中的get和set属性
- 下一篇: 每周总结(第八周)