class Single
{
private Single s=null;
private Single(){};
public void getInstance()
{
if (s==null) { 加这个判断句 是为了提高程序运行效率 减少判断锁是否可以进去那
synchronized(this)
{
if(s==null) 这个if放在锁里面 是为了避免多线程 在调用的时候 如果有一个线程刚好进入if判断为true 没创建对象 就sleep到这的话,其他线程也是可以进来的,加入这时候线程2也进来了 也停到这了 而1线程继续执行 就创建了对象 而这个时候2线程早已经判断过了 是符合条件的 只要获得执行权 2线程也会创建对象的 这是不是就违背了单列设计模式的规则了
s=new Single();
}
}
return s;
}
} |