单例设计模式讲两个:饿汉式和懒汉式 。
饿汉式特点:线程安全 但是 不能延迟加载
懒汉式特点:延迟加载实例 但是 多线程不安全
怎么解决懒汉式的不安全问题呢?
使用 synchronized 同步代码块
怎么解决效率问题?
用双重判定
加同步时使用的锁是哪个?
类名.class
饿汉式代码示例:
class Single
{
private static final Single s = new Single();//提前创建了实例对象
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式代码示例:
class Single
{
private static Single s= null;
private Single(){};
public static Single getInstance()
{
if(s==null) //双重判定提高效率,不用每次都判定锁
synchronized(Single.class)//静态中使用同步锁是 类名.class 不是this
{
if(s==null)
s=new Single();
}
else
return s;
}
}