线程状态
2021-03-16 本文已影响0人
caster
java线程与操作系统线程状态略有不同。
1. 操作系统底层线程状态:
课本经典五状态:
计算机操作系统线程状态
2. JAVA线程状态:
JAVA线程状态:指的是java线程类中的状态枚举,如下:
package java.lang;
public class Thread implements Runnable {
public enum State {
NEW,
RUNNABLE,//
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
}
Thread.State | 说明 |
---|---|
NEW | 线程尚未start() |
RUNNABLE | 处于JVM级别运行状态;系统级别可能在等待处理器调度或已正在运行 |
BLOCKED | 正在竞争monitor lock(阻塞于锁),用来进入或是重新进入(调用过wait()方法)synchronized方法、块 |
WAITING | 线程调用了Object.wait()、Thread.join()或者LockSupport.park方法进入了waiting状态。等待状态的线程正在等待另一个线程执行特定的动作显示唤醒它:wait等notify,join等指定线程终止。被唤醒就进入BLOCKED状态 |
TIMED_WAITING | 相比WAITING多了超时自动唤醒,调用以下方法之一实现:Thread.sleep Object.wait(long) Thread.join(long) LockSupport.parkNanos LockSupport.parkUntil |
TERMINATED | 终止线程的线程状态。 线程已完成执行 |
RUNNABLE细分状态:
1. Ready
- 已就绪,等待处理器调度
- 调用start()方法后进入就绪状态
- 当前线程 sleep() 方法结束,其他线程 join() 结束,等待用户输入完毕,某个线程拿到对象锁等,也将进入就绪状态
- 当前线程时间片用完了,调用当前线程的 yield()方法,当前线程进入就绪状态
- 锁池里的线程拿到对象锁后(BLOCKED状态获取到lock后),进入就绪状态
2. Running
- 处理器正在运行该线程
3. 一小部分Blocked
-
JVM 并不关心操作系统线程的实际状态,从 JVM 看来,等待CPU使用权(操作系统状态为可运行态-Ready)与等待 I/O(操作系统处于等待状态)没有区别,都是在等待某种资源,所以都归入RUNNABLE 状态。
java线程状态
java的RUNNABLE对应操作系统的就绪和运行状态。
java的BLOCKED,WAITING,TIMED_WAITING对应操作系统的阻塞/挂起状态。