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 }

 

转载于:https://www.cnblogs.com/Shadowplay/p/7543077.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值