2014-07-12 43 views
1

假設有2個類,父類和繼承父類的子類。 現在和兩個有同步的兩個方法。我的問題是哪個對象鎖將用於鎖定此同步方法我創建對象像:父p = new Child(); 是父對象鎖還是子對象鎖?java中繼承的同步

+1

對於同步實例方法,它總是接收方對象的固有鎖定。引用類型無關緊要。 – awksp

回答

4

沒有父對象鎖或子對象鎖。只有一個鎖,對象's。在這種情況下,它將是p's。

如果另一個線程鎖定了孩子的同步方法,線程將在進入父類的同步方法時阻塞,反之亦然。

2

沒有單獨的父和子鎖。該對象只有一個鎖。無論繼承層次結構如何,對象的所有同步方法和對象上同步的所有同步塊都使用相同的鎖。

1

我認爲人們在這裏感到困惑的原因是:類繼承繼承實例字段。但對於方法,它只會繼承方法實現。所以只有鎖正在使用,在你的情況下是p。讓我知道它是否合理。

此外,使用繼承進行其他鎖定並不是一個好主意。使用組合 - 裝飾模式。請參見JCIP第4.4.1節