JUC——線程同步鎖(LockSupport阻塞原語)

  java.util.concurrent.locks.LockSupport這個是一個獨立的類,這個類的主要功能是用來解決Thread裏面提供的suspend()(掛起線程)、resume()(恢復運行)方法,這個兩個方法的本質上會存在有死鎖的嫌疑,因此從JDK1.4開始將其就已經列爲不建議使用的方法了。可是在JDK1.5開發JUC框架以後,考慮到JUC框架之中的各類實現機制時開始試圖還原以前被廢棄的操做,因而就有了LockSupport這個類。java

  這個類裏面有兩個方法:bash

  • 掛起
public static void park(Object blocker) { Thread t = Thread.currentThread(); setBlocker(t, blocker); unsafe.park(false, 0L); setBlocker(t, null); }
  • 恢復
public static void unpark(Thread thread) { if (thread != null) unsafe.unpark(thread); }

 

範例:觀察掛起與恢復執行框架

package so.strong.mall.concurrent; import java.util.concurrent.locks.LockSupport; public class LockSupportDemo { private static String msg = null; public static void main(String[] args) { final Thread mainThread = Thread.currentThread(); //獲取當前線程
        new Thread(new Runnable() { @Override public void run() { try { msg = "itermis.com"; } finally { LockSupport.unpark(mainThread); //無論線程的操做如何,都要解除掛起狀態
 } } }).start(); LockSupport.park(mainThread); System.out.println("**********主線程執行完畢,msg=" + msg); } }
**********主線程執行完畢,msg=itermis.com
相關文章
相關標籤/搜索