单例设计模模式——懒汉式为什么线程不安全

来源:互联网 发布:约拿情结 知乎 编辑:程序博客网 时间:2024/06/03 19:47
单例设计模式分为两种
饿汉式,懒汉式
无论哪一种,思想就三步,
0;就一个实例,则不能被实例化,所有构造函数私有的
1:提供一个实例
2:提供一个供外部访问的方法
懒汉式线程不安全,那为什么不安全呢?看代码!!!

假设开始线程0进入,判断instance为空,在将要创建实例时,cpu切换,

线程1又进来了,同样instance为空 创建了实例,这是cpu切换回来到0线程,继续创建实例

可见,经过分析共创建了 两个实例,还谈什么单例。


改进


可以保证线程安全同时又提高了效率。

假设0线程进来,instance为空,进入同步代码块,cpu切换,

线程1进来,instance为空,在同步代码块外,因为此时0正在里面

ok,cup切换,执行创建实例,当1在进入代码块后,此时instace不为空,直接返回instance

当在有线程进来instance不为空,不用执行同步代码块,效率提供了。

结论:一般开发都是饿汉式,因为不管怎么样,都是需要实例,那就不如先加载了(自己理解的),

0 0
原创粉丝点击