若是要让线程阻塞,咱们在讲线程基础的时候已经分析过了。若是要让线程暂停呢,不是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的应用场景还不是很清晰,欢迎各位同道一块儿交流!线程