线程根据其生命周期分成一下几种状态
- NEW 新建
线程刚创建 - RUNNABLE 可运行
在JVM中正在运行的线程 - BLOCKED 阻塞
线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行 - WAITING 等待
等待状态 - TIMED_WAITTING 超时等待
调用sleep() join() wait()方法可能导致线程处于等待状态 - TERMINATED 终止
线程执行完毕,已经退出
1. 状态详解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qtz0TB5G-1577707691688)(https://note.youdao.com/yws/res/42525/A47006CD0B88496F8F5351C2CE9D212B)]
1.1. NEW
当线程继承Thread或者实现了Runnable创建了线程对象后,当new线程对象过后线程就进入了初始的状态。
1.2. RUNNABLE
当线程对象调用了start()方法的时候,线程启动进入可运行的状态。就是CPU可以来执行他了,但是不一定会立即执行,需要等到分配给他的时间片段的到来
1.3. WAITING
当线程调用 o.wait()
t.join()
LockSupport.park()
后进入WAITING状态
1.4. TIMED_WAITTING
当线程调用 Thread.sleep(time)
o.wait(time)
t.join(time)
LockSupport.parkNanos()
LockSupport.parkUntil()
后进入TIMED_WAITTING状态
当线程调用 o.notify()
o.notifyAll()
LockSupport.unpark()
后退出 TIMED_WAITTING 进入RUNNABLE状态
1.5. BLOCKED
等待进入同步代码块的锁的时候进入BLOCKED 获得锁之后退出BLOCKED并进入RUNNABLE状态
1.6. TERMINATED
线程执行完成之后进入 TERMINATED