Java併發系列7--LockSupport線程阻塞工具類

若是要讓線程阻塞,咱們在講線程基礎的時候已經分析過了。若是要讓線程暫停呢,不是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的應用場景還不是很清晰,歡迎各位同道一塊兒交流!線程

相關文章
相關標籤/搜索