黑马程序员技术交流社区

标题: 关于线程的五种状态及其特点 [打印本页]

作者: Ф福@ 御    时间: 2014-5-20 20:10
标题: 关于线程的五种状态及其特点
希望有个图解,给看看。

作者: 莫问纷飞    时间: 2014-5-20 21:51
这个图片就是

2014-05-20_215126.png (120.94 KB, 下载次数: 138)

2014-05-20_215126.png

作者: alax    时间: 2014-5-21 03:40
线程的5种状态:创建,就绪,运行,阻塞,终止。
  创建:在程序中使用构造方法创建了一个线程过后。代表方法为Thread类中的new Thread()或者new Thread(Runnable target,String name)。
  就绪:新建线程对象后,调用该线程的start()方法就可以启动线程了,线程被启动后,进入就绪状态,此时线程进入可运行线程池中排队,登陆CPU服务,这表明它具有了运行条件。
  运行:绪状态获得处理器资源,线程就进入运行状态。此时自动调用线程对象的run()方法,run方法定义了该线程的操作或者功能主体。
  阻塞:阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

    (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

    (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

  死亡:线程调用stop()方法时或者run()方法执行结束后,即处于死亡状态。
作者: 曲佳奇    时间: 2014-5-21 10:07
本帖最后由 曲佳奇 于 2014-5-21 10:11 编辑

参考了很多资料 线程执行start()之后应属于就绪状态  也就是毕老师视频中说的临时阻塞状态 而不是运行状态

1.新建状态(New):新创建了一个线程对象.
2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权.
3.运行状态(Running):就绪状态的线程获取了CPU,执行程序代码.
4.阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行.直到线程进入就绪状态,才有机会转到运行状态.阻塞的情况分三种:
   1)等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中.
   2)同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
   3)其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态.当sleep()状态超时 join()等待线程终止或者超时 或者I/O处理完毕时,线程重新转入就绪状态.
5.死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期.

thread_state.jpg (35.33 KB, 下载次数: 136)

thread_state.jpg

作者: Ф福@ 御    时间: 2014-5-21 12:48
谢谢各位的图解
作者: 艮昕辶    时间: 2014-5-21 13:39
老毕画的  大哥将就一点啦

线程状态图.jpg (47.07 KB, 下载次数: 130)

线程状态图.jpg

作者: 李金林    时间: 2015-11-29 15:34
学习一下。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2