5-3 安全发布对象-四种方法-2 中, 都已经锁掉了class了,即使重排序了,但是还没实例化完成之前,线程A应该不会释放这个锁啊,那其他线程应该进不来啊?

来源:4-3 安全发布对象-四种方法-2

慕聖9527

2018-03-26

5-3 安全发布对象-四种方法-2 中, 都已经锁掉了class了,即使重排序了,但是还没实例化完成之前,线程A应该不会释放这个锁啊,那其他线程应该进不来啊?

写回答

1回答

Jimin

2018-03-26

你好,尽管线程A没有释放这个锁,但是线程B依然可以执行不包含锁的代码,如果发生了指令重排序导致线程A还没实际初始化完成,线程B执行时发现这里的实例已经不为空了,就会直接返回这个未实际处理完成的实例,而不会进入锁等待的代码里。导致返回的实例有问题。

1
1
慕聖9527
被小括号里的class误导了,以为只要和这个class有关的资源都不可访问,翻看了前面的笔记,原来作用域只是大括号里面的代码块。然后我做了实验,确实是可以被访问到。非常感谢!
2018-03-26
共1条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程