Java线程状态转换(最详细的状态转换流程图)

本文介绍了Java线程的六种状态:New、Runnable、Timed Waiting、Waiting、Blocked和Terminated,并详细解析了状态间的转换。New表示创建但未启动,Runnable包括Ready和Running,实际执行受CPU线程调度影响。Timed Waiting和Waiting状态涉及线程的等待与超时,Blocked状态通常因无法获取锁而发生,而Terminated是线程执行完毕后的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java线程的状态和状态转换

  • new,
  • runnable,
  • timed waiting,
  • waiting,
  • blocked,
  • terminated.

New 代表创建但是未启动的线程

runnable又可分为ready和running两个子状态,由于单个cpu同一时间只可以执行单个线程,多线程的分配是通过cpu时间片来分配的,因此有一部分线程会在等待队列,也就是ready状态。CPU的Thread scheduling(线程调度)决定着线程什么时候可以实际运行

处于runnable状态的线程在JVM层面上来看是执行中的状态。但是在操作系统层面上,或许线程在等待一些资源

Timed waiting是线程指定了特定的时间,调用一下方法的现场会进入此状态

  • Thread.sleep(sleeptime)
  • Object.wait(timeout)
  • Thread.join(timeout)
  • LockSupport.parkNanos(timeout)
  • LockSupport.parkUntil(timeout)

waiting 状态是由于线程调用了以下方法

  • Object.wait()
  • Thread.join()
  • LockSupport.park()

blocked 是当前线程无法获取synchronized 锁或者是当前锁对象调用了Object.wait()方法,这时候会进入阻塞状态

线程执行完run()方法则会进入 terminated 状态.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值