我想肯定有他的作用,就让我来给你解说下.:
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{ 有时候会发生这种情况..全部线程都判断s==null全部走到同步锁的时候,假设一个线程进去后, s就不等于空了..然后其他线程因为上面是if不是while就不会去判断上面那个条件,直接往下走, 假如同步锁里没有那个判断的话,就会出现.每个都要new一遍..会造成安全隐患., 但是可以有个简练代码方式..同步锁里面的if去掉.外部的if改为while.就好了.不仅代码简练,而且不会出现隐患.谢谢..表达的不好.
synchronized( Single.class)
{
if(s==null)?????
s=new Single();
}
}
return s;
}
} |