当前位置: 首页 > news >正文

7.Java线程中的重要方法(interrupt、isInterrupted、interrupted)

interrupt

interrupt(),打断线程的执行。
可以打断正常运行的线程,也可以打断正在阻塞的线程。
正在阻塞可以是:sleep(), wait(), join().

  • 若打断正常运行的线程,则打断标记会被置为true;但是线程并不会结束运行。相当于线程知道有别的线程要打断它,当前线程可以自己决定是否停止运行。
  • 若打断正在阻塞的线程,打断标记还是false,此时线程会以异常的形式退出。
  • 打断标记,标志这个线程是否被打断了。可以使用isInterrupted()方法查看打断标记。

打断正常执行的线程

    public static void main(String[] args) {Thread thread = new Thread(() -> {while (true) {// 若被打断,是否终止运行,由自己决定if (Thread.currentThread().isInterrupted()) {break;}}});thread.start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}// 主线程一秒后打断子线程thread.interrupt();log.debug("打断标记:{}", thread.isInterrupted());// true}

输出:

2025-10-03 14:52:05.644 [main] c.c.e.d.Main - 打断标记:true

打断sleep中的线程

    public static void main(String[] args) {Thread thread = new Thread(() -> {try {log.debug("子线程sleep..");TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {log.debug("子线程被打断了..");e.printStackTrace();}});thread.start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}// 主线程一秒后打断子线程thread.interrupt();log.debug("打断标记:{}", thread.isInterrupted());}

输出:

2025-10-03 14:58:32.646 [Thread-0] c.c.e.d.Main - 子线程sleep..
2025-10-03 14:58:33.656 [Thread-0] c.c.e.d.Main - 子线程被打断了..
2025-10-03 14:58:33.656 [main] c.c.e.d.Main - 打断标记:true
java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:342)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at com.example.day1.Main.lambda$main$0(Main.java:14)at java.lang.Thread.run(Thread.java:750)

isInterrupted 和 interrupted

这两个方法都是判断线程是否被打断了,区别是:

  • isInterrupted 是线程对象调用,并且不会清除打断标记,也就是不会将打断标记置为false;
  • interrupted 是Thread中的静态方法,并且会清除打断标记,也就是将打断标记置为false。

源码:

    public static boolean interrupted() {return currentThread().isInterrupted(true);}public boolean isInterrupted() {return isInterrupted(false);}private native boolean isInterrupted(boolean ClearInterrupted);
http://www.dtcms.com/a/438057.html

相关文章:

  • 【深度学习计算机视觉】09:语义分割和数据集
  • Vue3 + Three.js 实现 3D 汽车个性化定制及展示
  • 外贸网站 费用广告公司取名字
  • 金融分析师技能提升路径与学习资源指南
  • MySQL processes, threads, connections的区别
  • 自己做的网站首页变成符号了工程与建设
  • P6374 「StOI-1」树上询问(倍增+LCA)
  • epoll_ctl函数中`sockfd` 和 `ev.data.fd`的疑问解析
  • 做元器件上什么网站做网站公司的排名
  • hadoop-hdfs-secondaryNameNode
  • 每日一个网络知识点:OSI参考模型
  • 怎么在国外网站做推广wordpress企业主题制作视频教程
  • K8s不同工作负载对应LOL里哪位英雄
  • 【探寻C++之旅】第十六章:unordered系列的认识与模拟实现
  • 用terraform 创建一个GKE private cluster
  • [优选算法专题三.二分查找——NO.22寻找峰值]
  • 中国建设银行官方网站下载北京企业做网站
  • [优选算法专题三.二分查找——NO.24搜索旋转排序数组中的最⼩值]
  • 微服务项目->在线oj系统(Java-Spring)--竞赛管理
  • 苏州市吴江太湖新城建设局网站网站模版建设教程
  • 【AI Design】如何利用 Paraflow 从创意到产品设计规范
  • 360免费建站网址是什么深圳网站推广哪家好
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
  • Spring AI alibaba 工具调用
  • 机器学习基础入门(第三篇):监督学习详解与经典算法
  • 做产品的淘宝客网站网站建设的素材处理方式
  • 【专业词典】FAST
  • 诸城网站建设wordpress退出维护
  • 预约记录自动关联功能测试
  • 进程“悄悄话”函数——`socketpair`