Java 线程的几种状态

目录

线程状态及其含义

状态之间的切换条件


线程状态及其含义

Java线程主要有以下几种状态:

  1. 新建(New):线程对象已被创建,但还没有调用start()方法。
  2. 可运行(Runnable):线程对象调用了start()方法,此时线程就绪并等待CPU时间片以便执行。
  3. 阻塞(Blocked):线程因为某种原因放弃CPU使用权,暂时停止运行。在Java中,阻塞状态通常发生在线程尝试获取一个锁(synchronized block/方法),而该锁正被其他线程持有时。
  4. 等待(Waiting):线程因为调用wait()join()LockSupport.park()方法而进入等待状态,需要其他线程调用notify()notifyAll()LockSupport.unpark(Thread)来唤醒。
  5. 超时等待(Timed Waiting):线程因为调用了带有超时参数的sleep(long millis)wait(long timeout)join(long millis)Lock.tryLock(long timeout)等方法而进入超时等待状态。
  6. 终止(Terminated):线程因为执行结束或因为某种原因提前终止(如interrupt())而结束执行。

状态之间的切换条件

  • 新建(New) -> 可运行(Runnable):当线程对象调用了start()方法时,线程从新建状态变为可运行状态。
  • 可运行(Runnable) -> 阻塞(Blocked):当线程试图获取一个已被其他线程持有的锁时,它将从可运行状态变为阻塞状态。
  • 可运行 (Runnable)-> 等待(Waiting):当线程调用wait()方法时,它将从可运行状态变为等待状态。
  • 可运行(Runnable) -> 超时等待(Timed Waiting):当线程调用带有超时参数的方法(如sleep(long))时,它将从可运行状态变为超时等待状态。
  • 阻塞 (Blocked)-> 可运行(Runnable):当线程获取到它等待的锁时,它将从阻塞状态变为可运行状态。
  • 等待(Waiting) -> 可运行(Runnable):当线程被notify()notifyAll()唤醒时,它将从等待状态变为可运行状态。
  • 超时等待(Timed Waiting) -> 可运行(Runnable):当线程等待超时,或者被notify()notifyAll()唤醒时,它将从超时等待状态变为可运行状态。
  • 可运行/阻塞/等待/超时等待 -> 终止(Terminated):当线程执行完毕或因为异常退出时,它将变为终止状态。

完结~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值