三种Singleton的实现方式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 三种Singleton的实现方式

三种Singleton的实现方式

 2010/12/11 11:32:03  melin  http://melin.javaeye.com  我要评论(0)
  • 摘要:三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现。publicclassLazySingleton{privatestaticvolatileLazySingletoninstance;publicstaticLazySingletongetInstantce(){if(instance==null){synchronized(LazySingleton.class){if(instance==null)
  • 标签:实现 方式
三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现。
public class LazySingleton {   
    private static volatile LazySingleton instance;   
       
    public static LazySingleton getInstantce() {   
        if (instance == null) {   
            synchronized (LazySingleton.class) {   
                if (instance == null) {   
                    instance = new LazySingleton();   
                }
            }   
        }   
        return instance;   
    }   
}  


/**
 * 利用putIfAbsent线程安全操作,实现单例模式
 * 
 * @author Administrator
 * 
 */
public class ConcurrentSingleton {
	private static final ConcurrentMap<String, ConcurrentSingleton> map = new ConcurrentHashMap<String, ConcurrentSingleton>();
	private static ConcurrentSingleton instance;

	public static ConcurrentSingleton getInstance() {
		if (instance == null) {
			instance = map.putIfAbsent("INSTANCE", new ConcurrentSingleton());
		}
		return instance;
	}
}


public class AtomicBooleanSingleton {
	private static AtomicBoolean initialized = new AtomicBoolean(false);
	private static AtomicBooleanSingleton instance;
	
	public static AtomicBooleanSingleton getInstantce() {   
		checkInitialized();
        return instance;   
    }
	
	private static void checkInitialized() {
		if(instance == null && initialized.compareAndSet(false, true)) {
			instance = new AtomicBooleanSingleton();
		}
	}
}
发表评论
用户名: 匿名