簡體   English   中英

在另一個同步方法中引用同步方法

[英]Referencing a synchronized method inside another synchronized method

我有兩種方法。

它們都是方法同步的。如果我從另一個方法調用一個方法,那將是一個死鎖情況嗎?

不,假設兩個方法都在同一個類中(並且都是static或兩者都不是static )。 只有當嘗試進入的線程可以獲取監視器對象時才會輸入synchronized方法(例如, this )。 由於線程已經獲得了監視器,它可以簡單地輸入第二種方法而不會有任何進一步的麻煩。

如果thread 1獲得A上的鎖定並且還想要鎖定B Thread 2B上有一個鎖,並希望鎖定A 這是一個僵局。 此外,一切皆有可能。

這取決於:

  • 如果這些是兩個(或更多)不同對象的同步方法,
  • 如果多個線程訪問這些對象,
  • 如果這些對象上的鎖定順序可以變化(在一種情況下object1-> object2和其他case object2-> object1)

然后是的,你可以陷入僵局。

但是,如果您在同一個對象上討論同步方法,則無法獲得死鎖:對象的監視器是可重入的:如果您已經擁有它,則可以再次請求監視器(輸入同步阻止同一個對象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM