线程安全的两种单例模式

线程安全的两种单例模式

项目中单例模式应该是使用的比较多的一种设计模式,具体有很多种实现单例的方式,但是考虑到在并发的情况下,需要注意线程安全,这里给出两种比较常用的线程安全的单例实现。

1.静态内部类实现
/**
 * Created by Easzz on 15/06/2017.
 * 静态内部类实现单例模式
 */
public class Singleton3 {
    private Singleton3(){}
    public static class Holder{
         static Singleton3 singleton3=new Singleton3();
    }
    public static Singleton3 getInstance(){
        return Holder.singleton3;
    }
}
2.双重检查锁实现
/**
 * Created by Easzz on 2017/1/15.
 */
public class Singleton {
    //饿汉式单例模式
    private static Singleton uniqueInstance=null;
    private Singleton(){ }
    //双重检查锁
    public static Singleton getSingleton(){
        if (uniqueInstance==null){
            //若两个线程同时进入if,第一个线程进入synchronized,创建对象,第二个线程阻塞,
            //当第一个线程退出时,需要再次判断是否为null,否则第二个线程还是会创建对象。
            synchronized (Singleton.class){
                if (uniqueInstance==null){
                    uniqueInstance=new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}

另外,在《Effective java》中写到,

单元素的枚举类型已经成为实现Singleton的最佳方法。

用枚举也可以实现线程安全的单例模式。这里就不列出代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值