2011-11-06 61 views

回答

10

鎖的優點是

  • 有可能使他們公平
  • 有可能讓一個線程響應中斷而鎖定對象上等待。
  • 有可能試圖獲取鎖,但立即返回或超時後,如果鎖不能獲得
  • 有可能獲得在不同的範圍釋放鎖,並在不同的順序

請注意,這在javadoc of Lock及其子類中有解釋。

高性能緩存可以使用ConcurrentMap來實現。

+0

第二點似乎措辭不妙。您可以中斷在正常的內部Java監視器上等待的線程。 'Lock'具有'lockInterruptibly',它可以在阻塞獲取鎖的同時中斷線程。 –

+0

@Tom:你當然可以中斷阻塞的內存等待內部監視器,但是線程不會響應中斷。這就是我的意思:中斷方法將被調用,但是線程在獲取鎖之前不會自行中斷,並且可以永遠保持這種狀態。我已經改變了措辭,使其更加明確。 –

+0

關鍵是目標線程在'Thread.State.BLOCKED'而不是'Thread.State.WAITING'(或'TIMED_WAITING')。 –

-4

您需要知道何時使用鎖定以及何時使用同步塊/方法。

  • 如果您正在創建簡單應用程序,請使用同步塊。它避免了競賽條件。但是,在避免競爭條件的情況下,您可能會造成死鎖。

  • 如果您正在創建嚴重的應用程序,請使用鎖定。它也避免了競爭條件,但你也有避免死鎖的好處。

+1

這實際上並不是在同步鎖和顯式鎖之間進行選擇的關鍵。一個嚴重的應用程序可能很簡單,使用鎖定顯然也會導致死鎖,如同步一樣。 –

相關問題