A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习当中看到多线程时懒汉式存在安全隐患,所以要用synchronized同步,想问一下,synchronized内部是如何的,看源代码肯定看不懂,有没有人能把原理简单说一下

4 个回复

倒序浏览
  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。
回复 使用道具 举报
hao,基础知识非常牢固,1LV5.
回复 使用道具 举报
{:soso_e122:}看看视频 搜索资料吧 多理解 想办法用自己的话 表述出来 就是你的啦
回复 使用道具 举报
同步只在访问对象时对对象加锁,当有对象访问该同步对象时,其他对象就不能继续访问。直到该对象访问完,释放后才能访问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马