2013-01-22 120 views
1

想象一下,構建一個圍繞單個私有對象變量(可以說是Map<Something>)的狀態的類,該類中的所有方法都要獲取,設置或以其他方式修改該對象。從類內部同步對象來封裝對象訪問還是從外部訪問對象更好?

您認爲兩種同步方法中的哪一種更好?也許存在第三個更好的選擇。

  1. 製作類中的所有方法,它封裝了對象同步,或在物體上同步被修改
  2. 請訪問然後封裝同步的對象的類的實例中的所有的方法。

換句話說,從內部還是外部進行同步更好?

回答

1

那些有權訪問Map variable的方法應該包含一個synchronized(variable) { }塊,並且對該變量的所有訪問必須位於該塊中。當然,variable不能爲空。

這種方式可以處理時間,最好你的代碼花費在保護塊(例如讀取或寫入訪問variable)。

其他方面:如果你的類有多個資源需要保護,你不能這樣做,因爲它們會互相干擾。

+0

沒錯。這就是我所說的'或者在被修改的對象上同步'。那麼,根據你的回答,「內部」是一個更好的選擇呢? –

+0

是的,在這個意義上,#1是首選。可能有更多的原因,這些是最重要的國際海事組織。 – gaborsch