ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
中断一个正在运行的线程可以采用如下几种方法。 <br/> **1. `break`或`return`关键字** 在循环里面使用`break`关键字跳出循环、或使用`return`关键字退出`run`方法而中断线程。 ```java public class InterruptDemo1 { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { private int count = 0; @Override public void run() { while (true) { System.out.println(++count); if (count >= 10) { return; //退出run方法 } } } }); thread.start(); } } ``` <br/> **2. 调用`void interrupt()`方法请求中断线程** `interrupt`中断是一个请求不是强制,意味着被请求中断的线程可能不会被中断,还在继续跑。 ```java public class InterruptDemo2 { public static void main(String[] args) { Thread thread = new Thread(() -> { try { //Thread.currentThread().isInterrupted()如果当前线程被中断则返回true //2. 线程未到达5s未被中断,循环继续执行 while (!Thread.currentThread().isInterrupted()) { System.out.println("未被中断"); } //4. 到达5s线程被中断,循序停止 //当前线程已被中断,调用sleep阻塞线程抛出异常 Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("被中断——>" + e.getMessage()); } //5. 虽然当前线程被请求中断,但是处理了异常,所以当前线程线程继续往下执行 System.out.println("当前线程还在跑"); }); thread.start(); //1.启动线程 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } thread.interrupt(); //3.到达5s后中断线程 } } ``` 输出结果如下: ``` ... 未被中断 未被中断 未被中断 未被中断 被中断——>sleep interrupted 当前线程还在跑 ```