synchronized修饰的代码块的锁是何时释放的?
来源:4-2 如何写出线程安全的程序?

ValarRay
2019-12-09
老师,我在这里看到unlock操作,在其构造方法的调用之前
这个是为什么,不应该里面的代码都执行完成才释放锁吗?
写回答
1回答
-
bennyhuo
2019-12-09
你看到的是那样的,实际上执行过程有指令重排序,对于单线程来讲是对开发者来说是透明的,多线程的话就不一定了。
例子里面虽然加了锁,但注意的是只有所有的线程都真正获取了这个锁才可以用锁来保证不重排序,咱们的例子里面两个线程一个加了锁,另一个直接判断了instance不为空(实际上是开辟了内存还没有初始化)就没有获取锁。这个是关键点。
022020-09-01
相似问题