黑马程序员技术交流社区
标题:
线程在哪些状态下可以中断
[打印本页]
作者:
马胜平
时间:
2012-3-6 23:19
标题:
线程在哪些状态下可以中断
线程在哪些状态下可以中断,哪些阻塞状态下不可以中断
作者:
马胜平
时间:
2012-3-7 10:37
给自己顶
作者:
黄方
时间:
2012-3-7 12:46
哥们,看了你的问题
线程的状态四种:
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异常;基本上,针对异常,最好做一些和业务相关的处理,最好不要直接抛出,也不要直接吃掉异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2