Java怎么终止一个线程
上一篇文章写了线程的几种状态,最后说了的是终止.这篇文章就来说一下线程怎么终止一个线程.
在以前是有方法来直接终止一个线程的,但是太危险,现在就弃用了.现在终止一个线程,就是看标志位,来终止线程.这么说有点空.下面我们详细说一下怎么终止一个线程.
就比如说,一个线程正在处于运行状态,另外一个线程,我们简单一点直接就是主线程,就是开启一个线程在main方法中写.我们给我们创建的线程命名为thread,当在main方法中调用thread.interrupt()这个方法的时候就会将线程的状态标志为true,就是线程变为可终止的状态.我们可以加判断条件,或者whlie循环加循环条件,让其终止循环或者不去执行判断语句.这样就达到了终止线程的效果.那么还有一个问题,怎么拿到线程的状态,其实很简单,有两个方法,分别是interrupted()和currentThread().isInterrupted()这两个方法有在用法上要区分好currentThread()这个方法会改变标志位,如果为true,调用后会变成false.currentThread().isInterrupted()这个方法却不会,只会获取线程的状态.这两个方法没有好坏因场景来用,下面看代码案例
public class ThreadInterruptDemo {public static void main(String[] args) throws InterruptedException {Thread worker = new Thread(() -> {// 循环执行任务,每次迭代都检查中断状态while (!Thread.currentThread().isInterrupted()) {System.out.println("执行任务中...");try {Thread.sleep(1000); // 模拟任务耗时} catch (InterruptedException e) {// 若在休眠时被中断,会进入这里System.out.println("收到中断信号,准备退出");// 手动重置中断状态(因为异常会清除状态)Thread.currentThread().interrupt();}}// 退出循环后,线程执行完毕,进入终止状态System.out.println("线程已终止");});worker.start();Thread.sleep(3000); // 主线程等待3秒worker.interrupt(); // 发送中断信号(设置标志位为true)}
}
以上就是终止线程的方法