线程的生命周期中共有五个状态:
1.新建 2.就绪 3.运行 4.阻塞 5.死亡
一. 新建:
通过new关键字创建线程对象之后,创建的线程就被创建了,处于新建状态.该阶段仅仅和jvm创建其他类一样为对象分配内存,初始化其成员变量的值.线程没有表选出其他的行为.
二 . 就绪:
当程序调用线程的start()方法之后该线程就进入了就绪状态,这里注意的是线程并没有因为start()方法的执行直接进入运行状态.原因是线程并没有获得cpu资源,无法处于运行状态.
三. 运行:
当就绪的线程因为某些原因(其他线程运行已经完成...)得到cpu资源的时候,线程就开始处于运行状态了.
四. 阻塞:
当线运行状态下的线程失去cpu资源的时候,线程就处于了阻塞状态.如1.当线程调用了sleep()方法使线程进入睡眠状态. 2.线程调用了一个阻塞式的方法则在得到结果前线程会进入阻塞状态. 3.当线程需要获得一把同步锁并且得不到的时候就会进入阻塞状态 4.线程在等待某个其他线程的通知时处于阻塞状态. 5.线程调用了suspend()方法使得该线程挂起.该方法容易导致死锁,尽量避免使用.
五. 死亡:
当运行中的线程执行完毕后,线程就处于了死亡状态,另外.当线程中调用了stop()方法,或者遇到异常时就会处于死亡状态.已经死亡的状态时无法在运行的.
线程生命状态过程示例图:
注意:不要对同一个线程调用两次start(),一个线程能且仅能运行一次.也不要对已经死亡的线程进行start().都会应发illegalThreadStateException异常
关注笔者公众号,推送各类原创/优质技术文章 ⬇️