你的Java并发程序Bug,100%是这几个原因造成的
发布时间:2019-11-04 15:47:54 所属栏目:建站 来源:平头哥
导读:副标题#e# 可见性问题 可见性是指一个线程对共享变量进行了修改,其他线程能够立马看到该共享变量更新后的值,这视乎是一个合情合理的要求,但是在多线程的情况下,可能就要让你失望了,由于每个 CPU 都有自己的缓存,每个线程使用的可能是不同的 CPU ,这
但是实际在 JVM 编译器上可能不是这样,可能会被优化成如下指令:
看上去一个小小的优化,也就是这么一个小小的优化就会使你的程序不安全,假设抢到锁的线程执行完指令2 之后,此时的 instance 已经不为空了,这时候来了线程C,线程C 看到的 instance 已经是不为空的了,就会直接返回 instance 对象,这时候的 instance 并未初始化成功,调用 instance 对象的方法或者成员变量时将有可能触发空指针异常。可能的执行流程图: 未加 volatile 关键字的双重检测锁单例模式 上面就是造成 Java 程序在多线程情况下出 Bug 的三种原因,关于这些问题 JDK 公司也给出了相应的解决办法,具体如下图所示,这些解决办法的更多细节,我们后面在细细道来。 并发解决机制
(编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |