繁体   English   中英

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

[英]static synchronized and non static synchronized methods in threads difference in behavior

我理解Class对象上的静态同步锁,以及Object实例上的非静态锁。

但是在这个问题的接受答案中: 同步块中的静态与非静态锁定对象

使用非静态锁定对象时:

  • 线程1调用o1.foo()
  • 线程2调用o1.foo(),必须等待线程1完成
  • 线程3调用o2.foo(),它可以继续,而不是注意线程1和2

为什么线程3可以继续而不考虑线程1和2.线程3是否必须等待从线程1或2获取对象实例'this'上的锁才能继续?

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

因为它锁定了一个不同的对象。

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

线程3是否必须等待从线程1或2获取对象实例'this'的锁定才能继续?

不。 呼叫尝试分别同步(即锁定) o1o2 foo()方法调用start时,这些将成为各个线程的this 在调用上下文中各个线程的this是不相关的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM