深入學習Lock鎖(2)——LockSupport工具類

江左煤郎發表於2018-09-13

在同步元件中,當需要阻塞或喚醒一個執行緒的時候,都會使用LockSupport工具類來完成相應 工作。LockSupport定義了一組的公共靜態方法,這些方法提供了最基本的執行緒阻塞和喚醒功能,而LockSupport也成為構建同步元件的基礎工具。

    LockSupport定義了一組以park開頭的方法用來阻塞當前執行緒,以及unpark(Thread thread) 方法來喚醒一個被阻塞的執行緒。

  1. public static void park():阻塞當前執行緒,如果呼叫unpark(Thread thread) 方法解除阻塞或者中斷執行緒該方法才能返回。
  2. public static void parkNanos( long nanos):在park()方法的基礎上增加了超時返回條件。
  3. public static void parkUntil(long deadline):阻塞當前執行緒,直到從1970年到deadline毫秒數的某一時刻
  4. public static void unpark(Thread thread):喚醒處於阻塞狀態的執行緒。

    在Java 6中,LockSupport增加了park(Object blocker)、parkNanos(Object blocker,long nanos) 和parkUntil(Object blocker,long deadline)3個方法,用於實現阻塞當前執行緒的功能,其中引數 blocker是用來標識當前執行緒在等待的物件(以下稱為阻塞物件),該物件主要用於問題排查和系統監控。因為當執行緒阻塞(使用synchronized關鍵字)在一個物件上時,通過執行緒dump能夠 檢視到該執行緒的阻塞物件,方便問題定位,而Java 5推出的Lock等併發工具時卻遺漏了這一 點,致使線上程dump時無法提供阻塞物件的資訊。因此,在Java 6中,LockSupport新增了上述3 個含有阻塞物件的park方法,用以替代原有的park方法。


相關文章