关于Thread的interrupt

  1. Thread的interrupt方法会引发线程中断。

    主要有以下几个作用:

    • 如Object的wait方法,Thread的sleep等等这些能够抛出InterruptedException异常的方法,在遇到调用对应线程的interrupt方法后就会抛出InterruptedException异常。

      • 抛出InterruptedException时同时会重置中断状态

        如下面代码

                Thread t=new Thread(()->{
        try {
        Thread.sleep(10000);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
        //由于InterruptedException异常清空了中断状态,这里的Thread.interrupted()返回的是false
        System.out.println("interrupt statu: "+Thread.interrupted());
        });
        t.start();
        Thread.sleep(3000);
        t.interrupt();
        Thread.currentThread().join();
      • interrupt调用之后再执行sleep之类,也会抛出InterruptedException异常

                Thread t=new Thread(()->{
        Thread.currentThread().interrupt();
        try {
        Thread.sleep(1000);
        } catch (InterruptedException e) {
        //会抛出异常,走到这里
        e.printStackTrace();
        }
        });
        t.start();
    • LockSupport.park在使当前线程暂停后,调用interrupt方法也会使线程重新唤醒,执行后续代码。

2、关于Thread的isInterrupted方法

public static boolean isInterrupted()
public boolean isInterrupted()

上面两个方法都是检测线程是否被中断,也就是是否调用了interrupt方法。内部都是调用了native方法isInterrupted。

    /**
* Tests if some Thread has been interrupted. The interrupted state
* is reset or not based on the value of ClearInterrupted that is
* passed.
*/
//测试线程是否已被中断。 由于ClearInterrupted的值来决定是否重置中断状态。
private native boolean isInterrupted(boolean ClearInterrupted);

但是有一些区别

public static boolean interrupted() {
return currentThread().isInterrupted(true);
}

这个静态方法使判断当前线程是否被中断,isInterrupted里面的入参是true,表示清空中断状态,也就是如果对应线程调用了interrupt进行了中断后,如果连续调用这个方法两次返回值是不一样的,第一次返回true,第二次返回false。因为第一次调用时会重置中断状态。


    public boolean isInterrupted() {
return isInterrupted(false);
}

这个方法isInterrupted里面的入参是false,不会重置中断状态。也就是如果对应线程调用了interrupt进行了中断后,如果连续调用两次这个方法返回值都是一样的,都是true。

如果在调用interrupt进行中断的线程结束后,调用上述两个中断检测,返回值也是false

关于Thread的interrupt的更多相关文章

  1. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...

  2. java中Thread的 interrupt异常处理

    http://blog.csdn.net/srzhz/article/details/6804756

  3. Java Thread interrupt

    现有线程对象threadA,调用threadA.interrupt(),则threadA中interrupted状态会被置成false,很多线程中都是通过isInterrupted()方法来检测线程是 ...

  4. 关于Thread类中三个interrupt方法的研究与学习(转)

    先看三个方法原型: public void interrupt(): public boolean isInterrupted(): public static boolean interrupted ...

  5. Thread之八:interrupt中断

    Java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,它只是要求被中断线程在合适的时机中断自己,这需要被中断的线程自己处理中断.这好比是家里的父母叮嘱在外的子女要注意身体,但子女是 ...

  6. Thread的中断机制(interrupt)

    先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...

  7. (转)Thread的中断机制(interrupt)

    先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...

  8. Java Thread.interrupt interrupted

    Java Thread.interrupt @(Base)[JDK, 线程, interrupt] 原文地址,转载请注明 下面这个场景你可能很熟悉,我们调用Thread.sleep(),conditi ...

  9. Thread的中断机制(interrupt),循环线程停止的方法

    一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...

随机推荐

  1. 大前端快闪二:react开发模式 一键启动多个服务

    最近全权负责了一个前后端分离的web项目,前端使用create-react-app, 后端使用golang做的api服务. npx create-react-app my-app cd my-app ...

  2. USACO Section 4

    前言 好久没更新这个系列了,最近闲的无聊写一下.有两题搜索懒得写了. P2737 [USACO4.1]麦香牛块Beef McNuggets https://www.luogu.com.cn/probl ...

  3. bzoj4589-Hard Nim【FWT】

    正题 题目链接:https://darkbzoj.tk/problem/4589 题目大意 求有多少个长度为\(n\)的数列满足它们都是不大于\(m\)的质数且异或和为\(0\). 解题思路 两个初始 ...

  4. CF438E-The Child and Binary Tree【生成函数】

    正题 题目链接:https://www.luogu.com.cn/problem/CF438E 题目大意 每个节点有\(n\)个权值可以选择,对于\(1\sim m\)中的每个数字\(k\),求权值和 ...

  5. Feign 400错误引发的一系列问题

    Feign 400错误引发的一系列问题 问题介绍 在使用Feign进行远程调用的时候出现非常奇怪的400错误,错误信息大概如下: feign.FeignException: status 400 re ...

  6. 市区择房分析(ArcPy实现)

    1, 背景 如何找到环境好.购物方便.小孩上学方便的居住区地段是购房者最关心的问题.因此购房者就需要从总体上对商品房的信息进行研究分析,选择最适宜的购房地段. 2,目的 学会利用缓冲区分析和叠置分析解 ...

  7. CompleteFuture实现简单的任务编排实践

    CompleteFuture实现简单的任务编排实践 一:前言 ​ CompleteFuture是java8 新提供的API,是对函数式编程思想的体现,提供了很多的对于函数式编程支持.不止有同步处理功能 ...

  8. 手把手教你学Dapr - 1. .Net开发者的大时代

    Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...

  9. BUAA_2019_OO_第一单元总结

    一.基于度量来分析自己的程序结构 1.第一次作业 1.1类图: 第一次作业由于比较简单,我采用了面向过程的编程方式.在Polynomail类的构造函数中将项直接求导输出.这样的弊端显而易见,不能进行优 ...

  10. activiti流程图上获取各节点的信息获取

    背景:         由于项目的需要,当用户在查看流程图时,当点击某个流程图片上的节点时,需要提示一些信息,这就需要获取各个节点的信息,此处获取id和name的值.           注意:这个并 ...