如果要让线程阻塞,我们在讲线程基础的时候已经分析过了。如果要让线程暂停呢,不是blocked,而是waiting,这时候有什么办法?
Thread类有一个弃用的方法suspend()是线程暂停的意思,他被弃用的原因是线程挂起的时候并不会释放持有的锁资源,而且suspend()挂起的线程状态依然是runnable,这也是不合理的。
那么有没有一种简单的方式可以使线程暂停呢?LockSupport就是专门来做这个的。
先来看代码:
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()方法的弊端。
PS:我自己对于LockSupport的应用场景还不是很清晰,欢迎各位同道一起交流!