1、线程的生命周期(状态)
(1)线程一共有6种状态分别为:
New:新创建状态,当new一个Thread对象,但未调用start方法后就处于该状态
Runnable:可运行状态,可运行状态实际上分为两种状态一种时Running(正在运行),另 一种是Ready(已准备),这两种状态统称为可运行状态,当线程的start方法被调用后 就会处于reedy状态,此时线程会等待分配CPU时间片,当获取到时间片之后就处于 running状态,同理当时间片用完(系统调度,或调用了yield方法)之后就又回到了ready 状态。
Terminated:已终止状态,线程正常运行完成或抛出异常后会到达已终止状态
Blocked:被阻塞,等待获取锁对象进入synchronized代码块或方法
Waiting:等待,处于该状态时线程不会被分配CPU执行时间,要等待被显示的唤醒,否则 会无限期的等待。
Timed_Wating:计时等待,与waiting相似,不同点在于不会无限期的等待,到等待时间 后会自动唤醒。
(2)线程状态间的转换
补充:
a、从Object.wait()状态刚被唤醒时,通常不能立刻抢到Monitor锁,那么就会从waiting先进入到Blocked状态,抢到锁后再转换到Runnable状态。
b、如果发生异常能够直接跳到Terminated状态,不必再遵循路径,比如直接从Waiting跳到Terminated。
c、阻塞状态:一般而言,把Blocked、Waiting、Time_Waiting都称为阻塞状态。
(3)代码演示:
(a)NEW、RUNABLE、TE