线程的生命周期详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Milogenius/article/details/89428194

在这里插入图片描述在这里插入图片描述

导读
与人有生老病死一样,线程也同样要经历开始(等待)、运行、阻塞和结束四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。

一.线程的状态

线程可以分为5个状态:

  • New(新建)
  • Runnable(就绪)
  • Running(运行)
  • blocked(被阻塞)
  • Dead(死亡)

二.线程状态详解

1.New(新建)

当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
例如:Thread t1=new Thread();

某国皇帝非常宠爱一位妃子,人称咖妃。这位妃子也非常争气,入宫一年左右,就为皇上诞下一位小皇子。 咖妃非常希望自己的儿子当太子,但是要等待机会。

2.Runnable(就绪)

线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();

日复一日,年复一年,皇帝原来越老,小皇子也越长越大,每天在目前的要求下,勤学苦读,他和其他皇子一样,等待着一个机会。

3.Running(运行)

线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

经过多年的考察,在大臣们的建议下,皇帝终于决定立储君,由于小皇子格外聪颖,又勤学奋进,格外受皇帝赏识,经管他不是长子,皇帝还是力排众议。选他作为太子,从此时此刻开始,他要跟着皇帝处理各种政务,管理国家。

4.blocked(被阻塞)

由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

正在等待:调用wait()方法。(调用motify()方法回到就绪状态)

被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

某天深夜,一份密折改变了原本平和的生活。有人密奏皇帝,太子密谋造反,皇帝大怒,将太子贬为皇子,并下令六部彻查此事,凡是牵连之人一律严办。面对对手制造的冤案,皇子一边按兵不动,一边也派人暗地里调查此事,他又在等待一个机会,东山再起。

5.Dead(死亡)

当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

自然终止:正常运行run()方法后终止

异常终止:调用stop()方法让一个线程终止运行

经过六部的调查,发现皇子被冤枉,而是有人背地里下套。于是在事情调查清楚后,皇帝恢复了他的太子之位。
。。。。若干年后,皇帝驾崩,太子如愿继位,完成了自己多年的夙愿,至此,皇子登位记完本。

参考资料
1.线程的生命周期

返回专栏目录

猜你喜欢

转载自blog.csdn.net/Milogenius/article/details/89428194