Java并发程序设计(八)设计模式与并发之单例模式

设计模式与并发之单例模式

简单的单例实现;

public class Singleton {

    private Singleton(){
        System.out.println("Creating Singleton");
    }

    private static Singleton instance=new Singleton();

    public static Singleton getInstance(){
        return instance;
    }
}

缺点:何时产生实例,不好控制。

延迟加载,需要instance才去创建:

 1 /**
 2  * @author: Tang Jiujia
 3  * @version: 2017/9/18 0018 14:44
 4  */
 5 public class LazySingleton {
 6 
 7     private LazySingleton(){
 8         System.out.println("LazySingleton created!");
 9     }
10 
11     private static LazySingleton instance=null;
12 
13     public static synchronized LazySingleton getInstance(){
14         if(instance==null){
15             return new LazySingleton();
16         }
17         return instance;
18     }
19 }

缺点:并发条件下加锁,影响性能。

利用静态内部类实现单例,客服以上两种方法的缺陷:

 1 /**
 2  * @author: Tang Jiujia
 3  * @version: 2017/9/18 0018 14:53
 4  */
 5 public class StaticSingleton {
 6 
 7     private StaticSingleton(){
 8         System.out.println("StaticSingleton created!");
 9     }
10 
11     private static class SingletonHolder{
12         private static StaticSingleton instance=new StaticSingleton();
13     }
14 
15     public static StaticSingleton getInstance(){
16         return SingletonHolder.instance;
17     }
18 }
Simple is important!
原文地址:https://www.cnblogs.com/Shadowplay/p/7543077.html