线程的四种状态

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该线程的run方法执行完,并顺利返回。 run方法被异常中断。 特殊情况下可以使用stop方法来强制杀死线程,但一般不推荐。
线程的四种状态又可划分为两种:是否属于alive状态。其中runnable和blocked状态是属于 alive状态的,而new和dead是 不属于alive状态的,我们可以用isAlive()方法来检查该线程是否处 于alive状态。我们无法检查该线程到底是处于runnable还是blocked状态,更区分不了是正处于 runnable状态的线程是否正占据着时间片而正在执行中(不过前一章告诉我们可以检测是否处于中 断状态!),同样也无法检查到底是处于new还是dead状态。
Blocked Thread:一个线程进入阻塞状态往往由下列原因构成:
一个线程由于并执行命令Thread.sleep(DELAYS),而进入睡眠状态。只有当设定的延时DELAYS到期 后,该线程才能重新回到runnable状态。 一个线程在等待I/O操作的完成而进入阻塞状态。只有当相应的I/O操作完成之后,该线程才能回到 runnable状态。 由于另一个线程目前处于锁定状态中,所以这个线程无法进入runnable状态而被阻塞。只有当那个 处于锁定状态的线程让出了锁定权,那么这个线程(和其他的线程)才能进入runnable状态。(一 旦一个线程被锁定,那么整个系统只能等待该线程执行完了之后才能执行别的线程。) 一个线程在等待某个条件的改变而进入阻塞状态。只有当另一个线程sign the condition may have changed之后,该线程会去检查这个条件是已改变,如果确实改变了,那么该线程才能进入runnable 状态。 一个线程由于执行suspend方法而被挂起,所以进入阻塞状态。只有当该线程被执行resume方法后, 才能回复runnable状态。suspend和resume方法已经逐渐不再使用。 Dead Thread:一个线程死掉的原因有下面两种:
wenku.baidu.com
New Thread:新建一个线程往往是通过 new Thread(r) 这种方法。新建一个线程并不意味着该线程 就能立即进入执行状态(即使是runnable状态也不一定是正在执行),而是对线程注册一些相关信 息,并等待调用该线程实例的start方法来启动该线程进入runnable状态。
Runnable Thread:当对该线程的实例调用start方法后,该线程进入runnable状态,进入runnable 状态的线程并不意味着一定就在执行中(不然就叫running thread了),它可能被阻塞或者正在执 行。即使处于正在执行中的runnable thread,也不一定是持续着执行一直到结束,它很可能因为操 作系统所分配的时间片到期而进入中断状态,而让其他获得时间片的线程执行,当其他的线程所占 据的时间片到期后,将会根据所有等待执行的线程的优先级来确定哪个线程继续(或开始)执行, 所以也未必是刚刚那个被抢占的线程恢复执行。
相关文档
最新文档