1. 程式人生 > >Lock鎖 和 ThreadLoca

Lock鎖 和 ThreadLoca

synchronized鎖。

   從程式碼執行開始上鎖 ,程式碼結束或者程式碼異常釋放鎖,他是內建鎖,自動化實現鎖,缺點:效率低,擴充套件性不高,不能自定義。

Lock鎖和synchronized的區別。

   Lock是手動去實現鎖,使用前必須先獲取鎖 ,在使用鎖,最後需要釋放鎖;Lock 介面的實現允許鎖在不同的作用範圍內獲取和釋放,並允許以任何順序獲取和釋放多個鎖。

  synchronized是自動實現鎖,當獲取了多個鎖時,它們必須以相反的順序釋放,且必須在與所有鎖被獲取時相同的詞法範圍內釋放所有鎖。

在 jdk1.5 之後,併發包中新增了 Lock 介面(以及相關實現類)用來實現鎖功能,Lock 介面提供了與 synchronized 關鍵字類似的同步功能,但需要在使用時手動獲取鎖和釋放鎖。

Lock 介面可以嘗試非阻塞地獲取鎖 當前執行緒嘗試獲取鎖。如果這一時刻鎖沒有被其他執行緒獲取到,則成功獲取並持有鎖。

Lock 介面能被中斷地獲取鎖 與 synchronized 不同,獲取到鎖的執行緒能夠響應中斷,當獲取到的鎖的執行緒被中斷時,中斷異常將會被丟擲,同時鎖會被釋放。

Lock 介面在指定的截止時間之前獲取鎖,如果截止時間到了依舊無法獲取鎖,則返回。

Condition用法

    Condition的功能類似於在傳統的執行緒技術中的,Object.wait()和Object.notify()的功能。Condition 例項實質上被繫結到一個鎖上。要為特定 Lock 例項獲得 Condition 例項,請使用其 newCondition() 方法。

   Condition condition = lock.newCondition(); 

    condition .await(); 類似wait

    condition . Signal() 類似notify

ThreadLoca

  Thread詳細說明見以下2篇部落格:

  https://www.cnblogs.com/xzwblog/p/7227509.html

    https://www.jianshu.com/p/98b68c97df9b