簡體   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