停止线程,表示停止之后线程就被销毁了,无法再恢复。

停止线程有一个 stop 方法,但是这个方法已经过时,我们不用它。

一般手动停止线程。

或者线程执行完 run 方法后会正常退出。

# 停止线程

停止线程一般用 interrupted 和 interrupt:

public class StopTest {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
int i = 0;
/*
判断当前线程是否处于中断状态,如果是中断状态返回true,并把状态改为未中断
如果不是中断状态,返回false
*/
while (!interrupted()) {
System.out.println("我是线程" + Thread.currentThread().getName() + ", 我在while循环~ 第"+ (++i) +"次");
}
}, "111");
thread.start();
Thread.sleep(100);
//改变当前线程的中断状态 未中断-->中断 手动停止线程
thread.interrupt();
}
}

# 暂停线程

概念:表示线程暂时挂起,不被运行,等到恢复之后,可以从暂停点开始继续运行。

暂停线程使用:

  1. suspend() :暂停线程
  2. resume() :恢复线程
public class SrTest {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
int num = 1;
while (true) {
System.out.println(Thread.currentThread().getName()+" num::"+(num++));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "ttt");
thread.start();
Thread.sleep(5000);
System.out.println("准备暂停子线程...");
thread.suspend(); //暂停线程
Thread.sleep(5000);
System.out.println("准备恢复子线程...");
thread.resume(); //恢复线程
}
}

不过上面这两个方法都是已过时的,可以使用 wait 和 notify 来实现暂停线程和恢复线程的效果。

后面再写。