线程安全的两种单例模式

来源:互联网 发布:js原型链继承 编辑:程序博客网 时间:2024/06/06 10:04

线程安全的两种单例模式

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

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的最佳方法。

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

原创粉丝点击