微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 双重锁定模式:是否断开?

为什么这种模式被打破了?对我来说好吗?有任何想法吗?
public static Singleton getInst() {
    if (instace == null) createInst();
    return instace;
}

private static synchronized createInst() {
     if (instace == null) {
         instace = new Singleton(); 
     }
}

解决方法

看起来好像很好,但是这种技术有许多微妙的问题,通常应该避免.例如,考虑以下事件序列:

线程A注意到这个值
没有初始化,所以它得到了
锁定并开始初始化
值.
>编译器生成代码是允许的
共享变量更新为
指向部分构造
A之前的对象已经完成
执行初始化.
>线程B通知共享
变量已经被初始化了(等等)
它出现),并返回其值.
因为线程B相信该值
已经初始化了,没有
获得锁.如果B使用
对象之前的所有
A进行初始化
B程序可能会崩溃.

您可以通过使用“volatile”关键字正确处理您的单例实例来避免这种情况

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐