黑马程序员技术交流社区
标题:
懒汉式(延迟加载的单例设计模式示例)????
[打印本页]
作者:
孙国军
时间:
2012-4-9 23:03
标题:
懒汉式(延迟加载的单例设计模式示例)????
//懒汉式(延迟加载的单例设计模式示例)
class DanLi
{
private DanLi danLi=null;
private DanLi()
{
}
public static DanLi getDanLi()
{
if(danLi=null)
{
synchronized(DanLi.class)
{
/*if(danLi=null)
{
danLi=new DanLi();
}
*/
danLi=new DanLi();//这边好像不需要if语句判断也可以啊!只不过多线程加载时,可能会出现danLi多次被付值的情况,但是好像影响不大啊??
}
}
return danLi;
}
}
作者:
曾晓文
时间:
2012-4-9 23:20
第二层 if(danLi=null)判断不能 省,不然可能会产生多个DanLi对象,且都能在不同线程上运行,不会把前面的DanLi对象替换掉
if(danLi=null)
{//如果一个线程执行到这里,刚好发生线程切换,另一个线程接在进来。接在执行下面的同步代码块,创建DanLi对象1,并把该对象的地址返回,该线程拿到对象1。而当第一个线程被唤醒,继续new 出一个DanLi对象2,并返回对象2的地址,所以2个线程用的不是同一个对象。这就不是单例了。
synchronized(DanLi.class)
{
/*if(danLi=null)
{
danLi=new DanLi();
}
*/
danLi=new DanLi();//这边好像不需要if语句判断也可以啊!只不过多线程加载时,可能会出现danLi多次被付值的情况,但是好像影响不大啊??
}
}
return danLi;
作者:
孙国军
时间:
2012-4-9 23:25
明白了,谢谢啊
作者:
曾晓文
时间:
2012-4-10 12:01
不用客气,互相学习
作者:
马超
时间:
2012-4-10 12:45
哥们,sa。。不网速太卡了。。踩了一下你的帖子、、、
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2