线程安全的两种单例模式
2017-11-01 16:04
141 查看
线程安全的两种单例模式
项目中单例模式应该是使用的比较多的一种设计模式,具体有很多种实现单例的方式,但是考虑到在并发的情况下,需要注意线程安全,这里给出两种比较常用的线程安全的单例实现。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的最佳方法。
用枚举也可以实现线程安全的单例模式。这里就不列出代码了。
相关文章推荐
- 写一下单例模式,考虑线程安全与线程不安全的情况
- java线程安全的单利模式
- 解决多线程单例模式的线程不安全问题
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- Java之线程安全的单例模式
- Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
- 单例模式与线程安全问题浅析
- 懒汉式的安全优化方式,两种方式。线程同时运行的时候,不会创建两个对象
- 线程安全的单例模式的几种实现方法分享
- 线程安全的单例模式
- java线程安全之多线程的设计模式(十四)
- 线程安全的单例模式是否真的安全(2)
- 线程安全的单例模式 -- 使用pthread_once一次初始化
- 老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)
- Java并发:线程安全的单例模式
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- DCL双检查锁机制实现的线程安全的单例模式
- 这里实现定界加锁线程安全的单例模式
- Spring单例模式与线程安全
- 单例模式之线程安全解析