suspend : 暂停线程
resume : 恢复 suspend 暂停的线程
但这两个 API 是过期的,也就是不建议使用的。
不推荐使用 suspend() 去挂起线程的原因,是因为 suspend() 在导致线程暂停的同时,并不会去释放任何锁资源。其他线程都无法访问被它占用的锁。直到对应的线程执行 resume() 方法后,被挂起的线程才能继续,从而其它被阻塞在这个锁的线程才可以继续执行。
public class SuspendResumeTest {
static TestThread t1 = new TestThread("线程1");
static TestThread t2 = new TestThread("线程2");
public static void main(String[] args) throws InterruptedException {
t1.start();
t2.start();
t1.resume();
t2.resume();
System.out.println("代码执行完毕");
System.out.println(t1.getState());
System.out.println(t2.getState());
}
}
class TestThread extends Thread {
public TestThread(String name) {
super.setName(name);
}
@Override
public void run() {
synchronized (TestThread.class) {
System.out.println(getName() + " 暂停");
Thread.currentThread().suspend();
System.out.println(getName() + " 恢复");
}
}
}
//--------------执行结果------------
代码执行完毕
线程1 暂停
RUNNABLE
BLOCKED
很显然死锁了!!
老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400 表演视频实例:https://v.qq.com/x/page/f0517awx0x4.html