A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马胜平 中级黑马   /  2012-3-6 23:19  /  1650 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程在哪些状态下可以中断,哪些阻塞状态下不可以中断

2 个回复

倒序浏览
给自己顶
回复 使用道具 举报
哥们,看了你的问题
线程的状态四种:

1.新建 new,线程被创建时,会短暂的处于这种状态,他已经分配了必需的资源,并执行了初始化,

2.就绪Runnable,这种状态下,只要调度器把时间片分配给线程,线程就可以运行。

3.阻塞Blocked,线程能够运行,但是某个条件阻塞了,调度器将忽略线程,不会分配线程任何CPU时间,直到线程重新进入就绪状态

4.死亡Dead,处于死亡或终止状态的线程将不再是可调度的,并且再也不会得到CPU时间
哪些阻塞状态下不可以中断?是我的理解有问题?
至于线程在哪些状态下可以中断?这个在:1. 新建 new    2.就绪Runnable    阻塞比较难预测,因为他们取决于外部事件。



.简单的中断处理方式

正在处理的任务,让他停止,最简单的方式就是自己维持一个cancel的标志,类似这样:1.private volatile boolean cancelled;  
public void run(){  
  while(!cancelled){  
        //do sth  
  }  
}  
sleep、wait、BlockingQueue.put等等是会相应中断的,即可中断的,Thread类包含interrupt方法,可以终止被阻塞的任务,这个方法设置线程的中断状态;如果这个线程已经阻塞,或者将执行一个阻塞操作,那么将抛出InterruptedException异常;基本上,针对异常,最好做一些和业务相关的处理,最好不要直接抛出,也不要直接吃掉异常。

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马