【发布时间】:2016-03-20 06:35:17
【问题描述】:
我了解 Class 对象上的静态同步锁和 Object 实例上的非静态锁。
但是在这个问题的公认答案中:Static versus non-static lock object in synchronized block
当你使用非静态锁对象时:
- 线程 1 调用 o1.foo()
- 线程 2 调用 o1.foo(),必须等待线程 1 完成
- 线程 3 调用 o2.foo(),它可以继续,不介意线程 1 和 2
为什么线程 3 可以在不考虑线程 1 和 2 的情况下继续运行。线程 3 是否必须等待从线程 1 或 2 获取对象实例“this”的锁才能继续执行?
【问题讨论】:
-
您能详细说明您的问题吗?因为您提出的问题已在您提供的链接中得到解答 - 它们是不同的 Object 实例,因此线程 3 正在锁定线程 1 和 2 的另一个锁。
-
是的,我的错,我认为它们是同一个实例,因此造成了混乱。
标签: java multithreading