• Java线程中interrupt,看一个例子都懂了


        Thread类中有3个与interrupt相关的方法,像三胞胎一样,初学者傻傻分不清楚,举了个例子,看完就懂。

    直接上代码,看注释。

    1. public class InterruptTaskTest {
    2. public static void main(String[] args) {
    3. System.out.println(Thread.currentThread() + " isInterrupted() 1: " + Thread.currentThread().isInterrupted()); // 初始false
    4. Thread.currentThread().interrupt(); // 执行后true
    5. System.out.println("--interrupt() 1"); // 无异常产生
    6. System.out.println(Thread.currentThread() + " isInterrupted() 2: " + Thread.currentThread().isInterrupted());
    7. Thread.interrupted(); // 执行后false,重置了状态
    8. System.out.println("++++++interrupted() 1");
    9. System.out.println(Thread.currentThread() + " isInterrupted() 3: " + Thread.currentThread().isInterrupted());
    10. InterruptTask task = new InterruptTask(3000); // 定时延迟3秒后,对当前线程interrupt()
    11. while (!Thread.interrupted()) { // 这时为false可以进入循环
    12. try {
    13. TimeUnit.SECONDS.sleep(2);
    14. } catch (InterruptedException e) {
    15. System.out.println("--interrupt() 2,异常信息:" + e.getMessage()); // 对sleep状态线程中断有异常
    16. System.out.println(task.target + " isInterrupted() 4: " + task.target.isInterrupted()); // 这时还为fasle,中断sleep线程特殊
    17. Thread.currentThread().interrupt(); // 必须在interrupt()一次,才能跳出循环
    18. System.out.println("--interrupt() 3"); // 无异常产生
    19. System.out.println(task.target + " isInterrupted() 5: " + task.target.isInterrupted()); // 这时为true,终止后面循环
    20. }
    21. }
    22. task.cancel();
    23. System.out.println("over!");
    24. }
    25. }

    代码在jdk1.8执行结果:

    Thread[main,5,main] isInterrupted() 1: false
    --interrupt() 1
    Thread[main,5,main] isInterrupted() 2: true
    ++++++interrupted() 1
    Thread[main,5,main] isInterrupted() 3: false
    --interrupt() 2,异常信息:sleep interrupted
    Thread[main,5,main] isInterrupted() 4: false
    --interrupt() 3
    Thread[main,5,main] isInterrupted() 5: true
    over!

    有帮助到你的话,敲个👍。 

  • 相关阅读:
    JavaSE基础加强、常用类补充
    三个月能学到多少网络安全知识?
    【已验证】微信小程序开发-绑定数据23.10.09
    HBase (六) --------- HBase API 操作
    几种常见的垃圾回收器和垃圾回收算法
    Vite2.0+Typescript+React+Antd+Less+Eslint+Prettier+Precommit构建标准化react应用
    TGA格式文件转材质
    刷题记录:HDU - 3001Travelling
    程序员45岁之后,绝大部分都被淘汰吗?真相寒了众人的心
    什么是代理服务器?它有哪些分类?
  • 原文地址:https://blog.csdn.net/onlyor/article/details/126955256