- 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;
- }
- }
复制代码 在这个例子中,比如说,当A调用时,当读到第二个if(s1==null) 时,可能就停在这了,然后cpu再调用B,B读到第一个if(s1==null)这停下了,因为加上synchronized后,A进去就相当于将其他的调用锁在外面的语句上了,要先执行完A,那么A执行完后,就已经创建了一个对象;当B再读到第二个if(s1==null)的时候不符合就直接结束了。如果再有其他C或D等调用的时候,就直接不符合第一个(s1==null)的条件,所以直接返回s。
|