双重检查加锁,实现单例模式
2016-09-16 23:54
323 查看
/*
*volatile关键词确保:当uniqueInstance变量被初始化为Singleton实例时,
*多个线程正确的处理uniqueInstance变量(对于volatile修饰的变量,
*jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的,volatile并不能
*保证原子操作)
*
*synchronized(Singleton.class)借助同步块,与volatile配合实现双重检查加锁,
*使用同步块的方法而不使用同步方法的好处是:只在第一次创建的时候才同步,避免
*了每次调用同步方法时的的消耗
*/
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if (uniqueInstance == null) {
synchronized(Singleton.class){
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
*volatile关键词确保:当uniqueInstance变量被初始化为Singleton实例时,
*多个线程正确的处理uniqueInstance变量(对于volatile修饰的变量,
*jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的,volatile并不能
*保证原子操作)
*
*synchronized(Singleton.class)借助同步块,与volatile配合实现双重检查加锁,
*使用同步块的方法而不使用同步方法的好处是:只在第一次创建的时候才同步,避免
*了每次调用同步方法时的的消耗
*/
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if (uniqueInstance == null) {
synchronized(Singleton.class){
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
相关文章推荐
- 单例模式中的 双重检查锁定(Double-Check Locking ) (多线程下单例模式中的双重检查锁定的实现)
- 单例模式中的 双重检查锁定(Double-Check Locking ) (多线程下单例模式中的双重检查锁定的实现)
- 利用双重检查加锁机制实现线程安全的单例模式
- Java使用double check(双重检查)实现单例模式的一个小细节
- 单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)
- 双重检查锁实现的单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 单例模式中的 双重检查锁定(Double-Check Locking )
- 二十二、应用双重锁定检查于单例模式中的问题
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 3 检查点模式(Check Point)
- 双重检查加锁 之单例模式并发
- 单例模式的三种实现 HungrySingleton(饿汉式) LazySingleton1(懒汉式:方法级锁) LazySingleton2(懒汉式:双检查锁 有BUG)
- 单例模式及双重检查锁
- 广而告之-双重检查锁定模式
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 3 检查点模式(Check Point)
- 单例模式与双重检查方案
- 双重检查锁定及单例模式 全面理解这一失效的编程习语
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式