美文网首页Java 杂谈
Double Check Lock是存在问题的

Double Check Lock是存在问题的

作者: 大黑跟小白的日常 | 来源:发表于2019-01-20 23:45 被阅读2次

Double Check Lock

上述代码,能保证单例方式的线程安全性吗?

答案是肯定的。它既能实现单例模式,又能保证单例化的线程安全性。

那它有什么问题呢?

hf = new HumanFactory2(),它到底是先将引用hf指向堆内存空间(新对象分配的空间),还是先实例化对象完成呢(堆内存数据装填)?不确定(jvm乱序执行)

问题那就是,在线程1synchronized代码块还没完全执行完毕时,线程2的第一次判断,hf已经为非空,返回给了调用者

那么就有可能在使用hf时,就会出现异常!

那么如何解决呢?volatile关键字,使用主内存中的hf

测试代码,待续...

相关文章

网友评论

    本文标题:Double Check Lock是存在问题的

    本文链接:https://www.haomeiwen.com/subject/hkxqjqtx.html