Java|谈谈Java线程有几种状态?

Java|谈谈Java线程有几种状态?

先说结论:
Java线程中一共有6种状态 , 分别为:NEW、RUNNABLE、WAITING、TIMED_WAITING、BLOCKED、TERMINATED , 其中RUNNABLE包含READY和RUNNING状态 , 详情可见下图:

  1. NEW:new一个Thread对象 , 但没有调用start方法前 , 线程处于初始状态
  2. RUNNABLE:在Java中包括两种状态 , RUNNING和READY
    • 【Java|谈谈Java线程有几种状态?】READY:就绪态 , 该状态下的线程已经获得执行所需的所有资源 , 只要CPU分配执行权就能运行;所有就绪态的线程存放在就绪队列中
    • RUNNING:获得cpu时间片 , 正在执行的线程;由于每个cpu同一时刻只能执行一条线程 , 因此每个cpu每个时刻只有一条线程运行 。
  3. BLOCKED:阻塞态 , 当线程请求锁失败时 , 就会进入阻塞态 , 一旦请求成功就会进入就绪队列等待cpu调度;所有阻塞态的线程存放在阻塞队列中
  4. WAITING:等待态 , 当运行中的线程调用wait、join、park函数时 , 当前线程进入等待态;所有等待线程放入等待队列;等待状态的线程需要被其他线程唤醒才能继续运行;进入等待状态会释放cpu时间片 , 以及资源(一般指锁)
  5. TIMED_WAITING:超时等待态 , 当运行中的线程调用sleep(time)、wait(time)、parkNanos、parkUtil时会进入超时等待态;和等待态的区别就是 , 超时之后会加入到阻塞队列中去 。
\uD83D\uDE4F如果内容对您有帮助 , 希望您能点赞收藏加关注 , 激励作者创作出更加优质内容 , 谢谢!