设计模式单例实现(2)
- 双重检测锁实现单例(不考虑)
- 静态内部类实现单例
- 枚举实现单例(没有延时加载)
双重检测锁实现单例(不考虑)
package org.test.singleton;
/**
*
* @ClassName: SingletonDemo3
* @Description: 双重检测锁实现单例(不考虑)
* @author Administrator
* @date 2017年3月30日
*
*/
public class SingletonDemo3 {
private static SingletonDemo3 instance = null;
private SingletonDemo3() {
};
public static SingletonDemo3 getInstance() {
if (instance == null) {
SingletonDemo3 sc;
synchronized (SingletonDemo3.class) {
sc = instance;
if (sc == null) {
synchronized (SingletonDemo3.class) {
if (sc == null) {
sc = new SingletonDemo3();
}
}
instance = sc;
}
}
}
return instance;
}
}
静态内部类实现单例
package org.test.singleton;
/**
*
* @ClassName: SingletonDemo4
* @Description: 静态内部类实现单例
* 1.外部类没有static属性,则不会像饿汉式在类加载时立即初始化实例
* 2.只有调用getInstance()才会加载静态内部类,加载类是线程安全的。instance
* 是static final 类型,保证内存中只会有这样一个实例存在,而且只能被赋值一次,
* 保证了线程安全。
* @author Administrator
* @date 2017年3月30日
*
*/
public class SingletonDemo4 {
private static class SingletonClassInstance {
private static final SingletonDemo4 instance = new SingletonDemo4();
}
private SingletonDemo4() {
}
public static SingletonDemo4 getInstance() {
return SingletonClassInstance.instance;
}
}
枚举实现单例(没有延时加载)
package org.test.singleton;
/**
*
* @ClassName: SingletonDemo5
* @Description: 枚举实现单例(没有延时加载)
* @author Administrator
* @date 2017年3月30日
*
*/
public enum SingletonDemo5 {
INSTANCE;
public void singletonOperation(){
}
}