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的应用场景还不是很清晰,欢迎各位同道一块儿交流!线程

相关文章
相关标签/搜索