---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
单例设计模式讲两个:饿汉式和懒汉式 。
饿汉式特点:线程安全 但是 不能延迟加载
懒汉式特点:延迟加载实例 但是 多线程不安全
怎么解决懒汉式的不安全问题呢?
使用 synchronized 同步代码块 ,但是如果简单的加上一个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;
}
}
}