这个过程形象点说会好理解。先说判断两次的流程。A程序调用方法,判断ss==null,成立进来了(假如此时cpu切换了,A挂起,另一个程序B进来,继续执行,一个道理。总体说,谁先上锁,谁就进来。只会有一个程序进来。)继续说A程序,进来以后,上锁,此时如果挂起,其它程序已经进不来了,等待cpu切换回来,A继续执行,此时判断ss==null'依然成立,接着就创建对象,然后返回s。这时就算B重新被执行进来以后ss的值已经不为空,也就不会再建立对象,这样就实现了对象的唯一性。
假如就判断一次,如果此时A程序调用方法判断条件成立进来了,然后挂了,B程序也进来了,没挂,锁门,建立对象,走了。A程序又活了,然后锁门,又建立对象,这就失去单例设计模式的意义了。
判断两次就是怕一个程序进来了,挂了,另一个程序也进来了,执行上锁后,就能保证判断第二次条件的时候只有一个程序,然后只创建一个对象。当其它程序再进来的时候,条件不再成立,就不会再创建对象了。
我晕,手机编辑的,有点乱。我也是今天刚学完这个知识点,我全当复习了,不知道我这么抽象得说你能理解不? |