Java 线程终止的三种方式
在 Java 中有以下 3 种方式可以中止正在运行的线程:
- 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止;
- 使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用;
- 使用 interrupt 方法中断线程。
1. 使用标志位中止线程(推荐)
在 run() 方法执行完毕后,该线程就中止了。但是在某些特殊情况下,run() 方法会被一直执行,比如在服务端程序中可能会使用 while(true){…} 这样的循环结构来不断地接收来自客户端的请求。此时就可以用修改标志位的方式来结束 run() 方法。
public class ExitFlagTests {
// volatile 修饰符用来保证其它线程读取的总是该变量的最新的值
private volatile boolean exitFlag = false;
// 退出标志
public void run() {
while (!exitFlag) {
// 执行线程的任务
System.out.println("Thread is running...");
try {
Thread.sleep(1000);
// 模拟一些工作
} catch (InterruptedException e) {
// 处理中断(如果需要)
Thread.currentThread().interrupt();
// 重新设置中断状态
}
}
System.out.println("Thread is stopping...");
}
public void stop() {
exitFlag = true; // 设置退出标志为 true
}
InterruptedException {
();
(exit::run);
thread.start();
Thread.sleep();
exit.stop();
}
}


