这是懒汉式多线程运行时的安全写法。
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null) // 第一次判断为null,满足,继续执行下面的代码,然后第二次以后的判断,都是不为null,这就不需要再对锁进行判断了,减少了对锁的判断。增加了运行效率。
{
synchronized(Stingle.class) 注意:加锁是为了保证只让创建一个对象,因为这是单例。而多线程运行的话不加锁,就有可能多个线程创建多个对象的情况,这样单例就无法保证了。这就是安全问题。
{
if(s==null)
s=new Single();
}
}
return s;
}
} 作者: 古银平 时间: 2012-10-23 10:59
//懒汉式
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class) //如果不同步那么A线程进来
{
if(s==null)
//--->A; 停这了,B线程获得执行权进来了
//--->B;也停这了,C线程获得执行权进来
//--->C,停这了。
//A线程,B线程,C线程唤醒后就会直接执行下面的语句,那么将会创建三个对象的。这就不是单例设计模式了,单例设计模式只允许创建一个对象。
s = new Single();
}
}
return s;
}
}