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