线程的六种状态以及相互转化
在线程new xxx().start()之后,并不是立即进入执行状态,我们在java.lang.Thread.state中可以看到有六种状态:
线程状态 | 发生条件 |
---|---|
New | 线程被创建,new xxxx(),但是还没有调用.start()方法 |
Runnable | 线程在jvm中的运行状态 |
Block(阻塞) | 线程为获取到锁对象(资源),线程进入阻塞状态,当线程获取到锁对象(资源),转入Runnable状态 |
Time_Wait | 通过调用带有超时参数的方法进入Time_Wait状态,常用的方法有Thread.sleep() Object.Wait() |
Wait(等待) | 与Time_Wait区别是超时不会自动唤醒,需要另一个线程主动notify(),或者是NotifyAll() |
Teminated(被 终止) | 因为Run方法正常退出而死亡,或者是异常未被捕获 |