目录
Java
中如何终止运行中的线程
Java
中终止线程,通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作,在 Java
中有以下 3
种方法可以终止正在运行的线程
- 使用
volatile
退出标志位,使线程正常退出,也就是当run()
方法完成后线程中止 - 使用
stop()
方法,已被弃用。原因是:stop()
是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃 - 使用
interrupt()
方法中断线程。注意使用interrupt()
方法中断正在运行中的线程只会修改中断状态位,可以通过isInterrupted()
判断。如果使用interrupt()
方法中断阻塞中的线程,那么就会抛出InterruptedException
异常,可以通过catch
捕获异常,然后进行处理后终止线程。有些情况,我们不能判断线程的状态,所以使用interrupt()
方法时一定要慎重考虑
使用 volatile
修饰标志位终止
实现 Runnable
接口
public class MyRunable implements Runnable {
// 定义退出标志,true会一直执行,false会退出循环
// 使用volatile目的是保证可见性,一处修改了标志,处处都要去主存读取新的值
public volatile boolean flag = true;
@Override
public void run() {
System.out.println("第" + Thread.currentThread().getName() + "个线程创建");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 退出标志生效位置,true会一直执行,false会退出循环
while (flag) {
System.out.println("线程正在执行中......");
}
System.out.println("第" + Thread.currentThread().getName() + "个线程终止");
}
}
在 main()
方法中创建线程,在合适的时候,修改标志位,终止运行中的线程
public class TreadTest {
public static void main(String[] arg) throws