[英]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的情况下继续。
因为它锁定了一个不同的对象。
(除非o1
和o2
碰巧引用同一个对象....)
线程3是否必须等待从线程1或2获取对象实例'this'的锁定才能继续?
不。 呼叫尝试分别同步(即锁定) o1
和o2
。 当foo()
方法调用start时,这些将成为各个线程的this
。 在调用上下文中各个线程的this
是不相关的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.