Java中线程的状态
New
:新创建对象,还没执行start()
方法RUNNABLE
:就绪态和运行状态。BLOCKED
:表示线程等到获取锁时候的状态。WAITING
:处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒。TIMED_WAITED
:与TIMED_WAITED
不同的是,这个到达一定时间会被自动唤醒。TERMINATED
:线程已经执行完毕
线程的生命周期
- 线程被实例化,线程的状态即为
NEW
- 线程调用
start()
方法,线程变成RUNNABLE
。其中RUNNABLE
分为运行态和就绪态。- 线程执行·yield()
方法,从
运行态->就绪态`。其实就是让出计算资源。 - 系统重新分配计算资源,线程从
就绪态->运行态
。
- 线程执行·yield()
- 等待其他线程某些操作。
- 由
Object.wait()
、Thread.join()
、进入WAITING
状态。 - 由
Object.notify
、Object.notifyAll()
重回RUNNABLE
状态。
- 由
- 线程进入进入指定时间的等待。
- 由
Thread.sleep(long)
、Object.wait(long)
、Thread.join(long)
进入TIMED_WAITED
- 由
Object.notify
、Object.notifyAll()
重回RUNNABLE
状态。
- 由
- 线程遇到同步锁
- 线程等待进入
sychronized
方法、块的时候进入BLOCKED
状态。 - 线程获得锁,回到
RUNNABLE
- 线程等待进入
- 线程执行完成,变成
TERMINATED
状态。