总结 Java 线程的几种状态

总结 Java 线程的几种状态

1. 线程状态一共有几种

Java 线程的状态可以分为以下 6 种

2. 每种状态表示的含义

新建状态(New):
线程对象被创建,但还未调用 start() 方法启动线程。

运行状态(Runnable):
线程正在 JVM 中运行,但可能正在等待 CPU 时间片或者等待 I/O 操作完成。

阻塞状态(Blocked):
线程正在等待锁或者其他阻塞条件,例如调用了 Thread.sleep() 方法或者等待输入输出完成。

等待状态(Waiting):
线程正在等待其他线程的通知,例如调用了 Object.wait() 方法或者 LockSupport.park() 方法。

计时等待状态(Timed Waiting):
线程正在等待指定时间之后的通知,例如调用了 Thread.sleep() 方法或者带有超时参数的 Object.wait() 方法或者 LockSupport.parkNanos() 方法等。

终止状态(Terminated):
线程已经执行完毕或者出现异常,不再运行。

3. 状态之间的切换条件

线程状态之间的切换条件如下:

新建状态(New):
当线程对象被创建时,自动进入新建状态。

运行状态(Runnable):
当调用了 start() 方法之后,线程进入就绪状态,等待 CPU 调度执行。

阻塞状态(Blocked):
当线程等待锁或者其他阻塞条件时,进入阻塞状态,等待条件满足后继续执行。

等待状态(Waiting):
当线程调用了 Object.wait() 方法或者 LockSupport.park() 方法等等待其他线程通知时,进入等待状态,等待其他线程通知后继续执行。

计时等待状态(Timed Waiting):
当线程调用了带有超时参数的 Object.wait() 方法或者 Thread.sleep() 方法等计时等待方法时,进入计时等待状态,等待超时或者其他条件满足后继续执行。

终止状态(Terminated):
当线程执行完毕或者出现异常时,进入终止状态,不再运行。

总结

线程的状态转换取决于线程本身的动作和外部条件的影响,理解线程状态转换和状态切换条件对于编写高效、稳定的多线程程序是非常重要的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值