这个过程就成为lazy loaded,也就是迟加载--直到使用的时候才进行加载。-潍坊达内负责整理
同步
上面的代码很清楚,也很简单。然而就像那句名言:“80%的错误都是由20%代码优化引起的”.单线程下,这段代码没有什么问题,可是如果是多线程,麻烦就来了。我们来分析一下:
线程A希望使用SingletonClass,调用getInstance()方法。因为是第一次调用,A就发现instance是null的,于是它开始创建实例,就在这个时候,CPU发生时间片切换,线程B开始执行,它要使用SingletonClass,调用getInstance()方法,同样检测到instance是null--注意,这是在A检测完之后切换的,也就是说A并没有来得及创建对象--因此B开始创建。B创建完成后,切换到A继续执行,因为它已经检测完了,所以A不会再检测一遍,它会直接创建对象。这样,线程A和B各自拥有一个SingletonClass的对象--单例失败!
屡屡别人会问,说代数差的肯定学JS吗?坚信想到多人一直有这个这种疑问,讲解这类疑虑曾经,我们准备知道份数学题:两地差距250米。松纵从A地以1米每秒的速度向B地走,那平心从B地以每秒1米的速度向a走。

请问:她们多久后遇到?遇到的地点离B地有多远?这那便是一道好理解大学数学题,潍坊达内培训告诉我们,只是对于代数不好的人,可能要为了很多时间。
只是就是JS不应该你把计算结果写出来,你要用到懂得他的思维思维就行。事实,要用JS来做到上面的疑虑,你只要用到理解个相对来说好理解的代数外延︰即加、减、乘、除和求余就行,就是和会背公式会有像。想到多人没看的JS的人,都认为代数不好,无法成为程序猿。
就是代数跟JS的关连肯定归纳为:精代数者,不见得会JS,不熟练代数,也能看的JS,如欲精JS,必精代数,若已熟练代数者,学JS不难也。之所以这样,代数不好而肯定学JS,只是会比代数好的人难,要有很大的志向,每天那便是要多去发展本人的思维和分解作文。
解决的方法也很简单,那就是加锁:
是要getInstance()加上同步锁,一个线程必须等待另外一个线程创建完成后才能使用这个方法,这就保证了单例的唯一性。
又是性能
上面的代码又是很清楚很简单的,然而,简单的东西往往不够理想。这段代码毫无疑问存在性能的问题--synchronized修饰的同步块可是要比一般的代码段慢上几倍的!如果存在很多次getInstance()的调用,那性能问题就不得不考虑了!
让我们来分析一下,究竟是整个方法都必须加锁,还是仅仅其中某一句加锁就足够了?我们为什么要加锁呢?分析一下出现lazy loaded的那种情形的原因。原因就是检测null的操作和创建对象的操作分离了。如果这两个操作能够原子地进行,那么单例就已经保证了。
以上就是潍坊达内给大家做的内容详解,更多关于UI的学习,请继续关注潍坊达内