我理解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开始可以继续?
答案 0 :(得分:2)
为什么线程3可以在没有关于线程1和2的情况下继续。
因为它锁定了另一个对象。
(除非o1
和o2
碰巧引用同一个对象....)
不应该让线程3等待获取对象实例的锁定'这个'从哪个线程1或2开始可以继续?
不。呼叫尝试分别同步(即锁定)o1
和o2
。当this
方法调用启动时,这些将成为各个线程的foo()
。
this
。{/ p>