操作系统中线程的生命周期
- 创建:新创建了一个线程对象。
- 就绪:该状态的线程位于可运行线程池中,等待被线程调度选中,获取 cpu 的使用权 。
- 运行:可运行状态的线程获得了 cpu 时间片 ,执行程序代码。
- 阻塞:阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu ,线程暂时停止运行。
- 死亡:线程执行结束,或者因为异常中断线程,则该线程结束生命周期。
Java底层源码线程的状态
-
NEW:尚未启动的线程的线程状态
-
RUNNABLE:线程可运行状态。在可运行状态的线程在Java虚拟机正在执行,但它可以从操作系统,诸如处理器在等待其他资源。
-
BLOCKED:线程的阻塞状态,等待监视器锁。 处于阻塞状态的线程正在等待监视器锁进入同步块/方法或调用后重新进入同步块/方法
-
WAITING:线程永久等待状态。 在等待状态的线程正在等待另一个线程来执行特定动作。 例如,一个已调用的 Object.wait() 的对象上正在等待另一个线程在该对象上调用 Object.notify() 或 Object.notifyAll() 。 已调用的 Thread.join(A线) 正在等待指定线程终止。
因为调用下列方法之一:
(1)Object.wait不带超时参数
(2)Thread.join不带超时参数
(3)LockSupport.park -
TIMED_WAITING:线程限时等待状态。
线程是在定时等待状态由于调用与指定正等待时间以下方法之一:
(1)Thread.sleep
(2)Object.wait带超时参数
(3)Thread.join带超时参数
(4)LockSupport.parkNanos
(5)LockSupport.parkUntil -
TERMINATED:线程终止状态。 线程执行完毕。
面试常问
1. 线程的创建方式?
2.说一说线程的生命周期
方法1:回答操作系统的五种状态
方法2:根据线程底层源码来分析的话,线程有六种状态,回答JAVA的六种状态的线程