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

    在同步組件中,當須要阻塞或喚醒一個線程的時候,都會使用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方法。spa

相關文章
相關標籤/搜索