本帖最后由 龚正军 于 2012-5-27 02:13 编辑
:
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
视频讲解上说明懒汉模式有以上3种,我一直不明白第三个程序要两次判断s==nul的含义,--------------------------------这是关键点因该分成两个问题答,为什么要两次判定??两次判定有何好处??
而且线程之间切换感觉十分不清晰?请高手解答!!!--------------------------------------------------------------------------------如果了解上面两点再来看这问题就很简单了。
--------------------------------------------割掉---------------------------------------------------
第一个问题:为什么要两次判定:这个问题很简单:为了让对于锁(也就是对象)的判定改成简单的if条件语句判定! if(s==null)第一个判定的时候,任何一个对象(比如A,B,C,D这4个对象都想往下走,但是他们遇到的第一个条件是判定S==NULL这个条件语句。
然后才是synchronized(Single.class) 这个锁,那么在第一个条件他们除了一个进来比如是D,(当D进来后,其他都进不来了)所以其实他们都不需要再判定synchronized(Single.class)这个锁了,就达到我们的目的了!
第二个问题:这么判定有什么好处??这要说到synchronized(Single.class)这个锁的判定,(这点我简单说明下,其实所有的锁为什么独一无二,对于计算机来说判定是相当繁琐的一个过程,(不太恰当的例子:比如"12ad"这个对象,计算机把'1'+'2'+'a'+'b'代表的数字相加来判定他与其他对象的不同,但还没完,如果他们数字是否相同也有可能,于是有一系列相对繁琐的判定---------这就构成了很浪费效率的无畏浪费),但是如果把它换成一个简单的if条件语句判定,那在大数据处理时是相当的节约时间和计算机效率的。
------------------------------------好处就是:不再浪费资源!
那么在理解上面两点后,再看后面的问题就简单了! |