单例模式中懒汉式的两种写法
一、双检加锁+volatile
public class ESingleton
{
// 双重检查锁 + volatile相结合的单例模式的实现
static ESingleton instance; // 保持单例的静态成员具有内存可见性
private ESingleton() {} // 私有构造器
static synchronized ESingleton getInstance()
{
if (instance == null) //检查①
{
synchronized (ESingleton.class)//加锁
{
if (instance == null) //检查②
{
instance = new ESingleton();
}
}
}
return instance;
}
}
二、实现静态内部类
public class Singleton {
//静态内部类
private static class LazyHolder {
//通过final保障初始化时的线程安全
private static final Singleton INSTANCE = new Singleton();
}
//私有的构造器
private Singleton (){}
//获取单例的方法
public static final Singleton getInstance() {
//返回内部类的静态、最终成员
return LazyHolder.INSTANCE;
}
}
静态内部类同样可以实现全局只是用一个单例。