若是要讓線程阻塞,咱們在講線程基礎的時候已經分析過了。若是要讓線程暫停呢,不是blocked,而是waiting,這時候有什麼辦法?
Thread類有一個棄用的方法suspend()是線程暫停的意思,他被棄用的緣由是線程掛起的時候並不會釋放持有的鎖資源,並且suspend()掛起的線程狀態依然是runnable,這也是不合理的。
那麼有沒有一種簡單的方式能夠使線程暫停呢?LockSupport就是專門來作這個的。
先來看代碼:ide
public class LockSupportDemo { static LsThread t1 = new LsThread("t1"); static LsThread t2 = new LsThread("t2"); public static void main(String[] args) throws InterruptedException { t1.start(); Thread.sleep(1000); t2.start(); LockSupport.unpark(t1); LockSupport.unpark(t2); t1.join(); t2.join(); } } class LsThread extends Thread{ public LsThread(String name) { super(name); } @Override public void run() { System.out.println("in "+getName()); LockSupport.park(this); System.out.println("out " +getName()); } }
LockSupport使用起來很是簡單,主要就是park()和unpark()方法。
使用LockSupport能夠解決suspend()方法的弊端。this
PS:我本身對於LockSupport的應用場景還不是很清晰,歡迎各位同道一塊兒交流!線程