1, 五种状态
新建(NEW)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。
2, 新建和就绪
A, 使用new关键字即创建一个线程,此时为新建状态,仅由Java虚拟机为其分配内存,并初始化成员变量。
B, 调用start()方法后,该线程处于就绪状态JVM会创建方法调用栈和程序技术器。
3, 运行和阻塞状态
A, 运行状态:就绪的线程,获取CPU,开始执行run()方法的线程执行体,此时,即为运行状态。
B, 阻塞状态:线程被迫中断运行,等待下一次运行的时机。
C, 进入阻塞的情形;
a) 线程调用sleep()方法主动放弃所占的处理器资源;
b) 线程调用一个阻塞是IO方法,在该方法返回前,该线程被阻塞。
c) 线程试图获得一个同步监视器,但该同步监视器正被其他线程持有。
d) 线程正在等待某个通知
e) 线程调用线程的suspend()方法将该线程挂起。
D, 解除阻塞的情况
a) 调用sleep()方法的线程经过了指定时间
b) 调用的阻塞是IO方法已经返回
c) 线程成功的获取同步监视器
d) 线程获取到其他线程的通知
e) 挂起状态的线程被调用resume()恢复方法。
4, 线程死亡
进入死亡状态的三种方式
1st run()或call()方法执行完毕;
2nd 线程抛出一个未捕获的异常或者错误;
3rd 直接调用该线程的stop()方法来结束该线程。
|
|