黑马程序员技术交流社区

标题: 求解,关于单例模式当中懒汉式的安全问题 [打印本页]

作者: 移动小坦克    时间: 2013-2-25 15:19
标题: 求解,关于单例模式当中懒汉式的安全问题
学习当中看到多线程时懒汉式存在安全隐患,所以要用synchronized同步,想问一下,synchronized内部是如何的,看源代码肯定看不懂,有没有人能把原理简单说一下
作者: 黄玉昆    时间: 2013-2-25 15:53
  1. class Single  
  2. {  
  3.     private static Single s = null;  
  4.     private Single(){}  
  5.     public static Single getInstance()  
  6.     {  
  7.         if (s == null)  
  8.         {  
  9.             synchronized(Single.class)  
  10.             {  
  11.                 if (s == null)  
  12.                     s = new Single();  
  13.             }  
  14.         }  
  15.         return s;  
  16.     }  
  17. }
复制代码
在这个例子中,比如说,A调用时,当读到第二个if(s1==null) 时,可能就停在这了,然后cpu再调用B,B读到第一个if(s1==null)这停下了,因为加上synchronized后,A进去就相当于将其他的调用锁在外面的语句上了,要先执行完A,那么A执行完后,就已经创建了一个对象;当B再读到第二个if(s1==null)的时候不符合就直接结束了。如果再有其他C或D等调用的时候,就直接不符合第一个(s1==null)的条件,所以直接返回s。

作者: 付玉光    时间: 2013-2-26 22:11
hao,基础知识非常牢固,1LV5.
作者: 杨玉辉    时间: 2013-3-2 21:32
{:soso_e122:}看看视频 搜索资料吧 多理解 想办法用自己的话 表述出来 就是你的啦
作者: tianyun    时间: 2013-3-13 21:47
同步只在访问对象时对对象加锁,当有对象访问该同步对象时,其他对象就不能继续访问。直到该对象访问完,释放后才能访问。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2