理解线程中断

摘抄自《Java并发编程的艺术》

中断可以理解为线程的一个标志位属性。它表示一个运行的线程是否被其他线程进行了中断操作。
中断操作就好比其他线程对该线程打了个招呼,其他线程通过调用该线程的interrupt()方法对其进行中断操作。

线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否被中断,也可以调用静态方法Thread.interrupted()对当前线程的中断标志位进行复原。

从Java的API中可以看到,许多声明抛出InterruptException的方法(例如Thread.sleep(long millis)方法)这些方法在抛出InterruptException之前,Java虚拟机会先将线程的中断标志位清除,然后抛出InterruptException,此时调用isInterrupted()方法将会返回false。

总结

  1. 如何实现线程中断?
    通过向对应的线程设置中断标志位,即调用interrupt()方法。
  2. 线程如何响应中断?
    通过一个不断检查中断标志位的代码来实现,如:
    public void run(){
     while(!isInterrupted()){
         //执行逻辑
     }
    }
  3. 声明中断异常的API函数内部实现是怎样的?
    这类方法一般都是native方法,即由Java虚拟机会先将线程的中断标志位清除,然后抛出InterruptException
全部评论

相关推荐

07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务