[英]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.