线程中的静态同步和非静态同步方法行为差异

时间:2016-03-20 06:35:18

标签: java multithreading

我理解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开始可以继续?

1 个答案:

答案 0 :(得分:2)

  

为什么线程3可以在没有关于线程1和2的情况下继续。

因为它锁定了另一个对象。

(除非o1o2碰巧引用同一个对象....)

  

不应该让线程3等待获取对象实例的锁定'这个'从哪个线程1或2开始可以继续?

不。呼叫尝试分别同步(即锁定)o1o2。当this方法调用启动时,这些将成为各个线程的foo()

表示在调用上下文中各个线程的this。{/ p>