Thread interrupt表示什么

学习了:https://www.zhihu.com/question/41048032?sort=created

学习了:http://blog.csdn.net/canot/article/details/51087772 这个膜拜一下;

源码膜拜:

public class Thread3 extends Thread{
public void run(){
while(true){
if(Thread.currentThread().isInterrupted()){
System.out.println("Someone interrupted me.");
}
else{
System.out.println("Thread is Going...");
}
}
} public static void main(String[] args) throws InterruptedException {
Thread3 t = new Thread3();
t.start();
Thread.sleep(3000);
t.interrupt();
}
}

Interrupt经典使用:

//Interrupted的经典使用代码
public void run(){
try{
....
while(!Thread.currentThread().isInterrupted()&& more work to do){
// do more work;
}
}catch(InterruptedException e){
// thread was interrupted during sleep or wait
}
finally{
// cleanup, if required
}
}

三种状态会抛出异常;

但是当线程被阻塞的时候,比如被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞时。调用它的interrput()方法。可想而知,没有占用CPU运行的线程是不可能给自己的中断状态置位的。这就会产生一个InterruptedException异常。

不是所有的都可以中断:

不是所有的阻塞方法收到中断后都可以取消阻塞状态, 输入和输出流类会阻塞等待 I/O 完成,但是它们不抛出 InterruptedException,而且在被中断的情况下也不会退出阻塞状态.
尝试获取一个内部锁的操作(进入一个 synchronized 块)是不能被中断的,但是 ReentrantLock 支持可中断的获取模式即 tryLock(long time, TimeUnit unit)。

最新文章

  1. 重温Servlet学习笔记--response对象
  2. 关于js的闭包
  3. 递归遍历多维数组(树数据结构)的超级简单方式,并且可以递归超过200层,摘自<<PHP精粹:编写高效PHP代码>>
  4. php 安装pdo_mysql 扩展
  5. 基于CodeBlocks上的wxWidgets开发环境配置
  6. 暂时告别Solr了
  7. ha666_go运行环境配置
  8. SQL从入门到基础 - 05 数据分组、Having语句
  9. HDU 4588 Count The Carries 计算二进制进位总数
  10. mysql中varchar和char区别(思维导图整理)
  11. UNIX环境高级编程——信号(API)
  12. android 数据重构(仿淘宝浏览记录,足迹)
  13. CTS问题分析6
  14. 在虚拟机中,设置centos7静态ip
  15. iPerf 笔记
  16. 根据元素取两个list<T>不同
  17. Oracleグラントについて
  18. EditorGUILayout,GUILayout
  19. 04-树5. File Transfer--并查集
  20. 用create-react-app来快速配置react

热门文章

  1. 利用递归分割(Split)字符串
  2. gulp安装成功但是无法使用
  3. [Apple开发者帐户帮助]二、管理你的团队(7)管理服务器帐户
  4. C - Tram
  5. struts2结果处理、获取参数(二)
  6. Django中的bug总结
  7. PHP获取远程和本地文件信息(汇总)
  8. Centos 自动删除日志文件的Shell代码
  9. 1、Visual Studio Code安装及Hello Word
  10. IIS7部署网站的一些细节问题。