java中断线程的两种方式
方式一:使用interrupt
Thread.currentThread().isInterrupted() :判断当前线程是否有中断标记,不会清除中断标记
Thread.interrupted():判断当前线程是都有中断标记,会清除中断标记
public static void main(String[] args) { MyRunable myRunable = new MyRunable(); Thread thread = new Thread(myRunable); thread.start(); for (int i = 0;i < 50;i++){ System.out.println(Thread.currentThread().getName()+"-"+i); try { Thread.sleep(300); //线程休眠,会让出cpu时间片(让同一进程中其余线程占用cpu时间片) } catch (InterruptedException e) { e.printStackTrace(); } if(i == 20){ thread.interrupt(); //在自定义线程上打了一个中断标记 } } }
class MyRunable implements Runnable{ @Override public void run() { for (int i = 0;i< 50;i++){ if(Thread.interrupted()){ //interrupted方法会清除中断标记 break; } System.out.println(Thread.currentThread().getName()+"-"+i); try { Thread.sleep(300); //sleep方法也会清除中断标记并报错 } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); //在报错的地方继续添加中断标记在循环判断的时候会中断该循环 } } } }
方式二:使用中断标记(更常用,更好理解)
public static void main(String[] args) { MyRunable myRunable = new MyRunable(); Thread thread = new Thread(myRunable); thread.start(); for (int i = 0;i < 50;i++){ System.out.println(Thread.currentThread().getName()+"-"+i); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } if(i == 20){ myRunable.flag = false; } } }
class MyRunable implements Runnable{ public boolean flag = true; @Override public void run() { int i = 0; while (flag){ System.out.println(Thread.currentThread().getName()+"-"+(i++)); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } }
线程的状态:在标红的三个状态下线程才会抛出 InterruptedException 异常
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)