黑马程序员技术交流社区

标题: 线程在哪些状态下可以中断 [打印本页]

作者: 马胜平    时间: 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