# Java中线程的六种状态

本文详细介绍了Java中线程的六种状态:New、Runnable、Blocked、Waiting、TimedWaiting和Terminated。线程在不同状态下有特定的转换规则,如调用start()进入Runnable,synchronized关键字可能导致Blocked,wait()使线程进入Waiting,而sleep()或join()则会导致TimedWaiting状态。理解这些状态对于优化多线程程序至关重要。

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

Java中线程的六种状态

线程的生命周期总共有以下六种状态

  • New(新创建)

  • Runnable(可运行的)

  • Blocked(阻塞的)

  • Waiting(等待)

  • Timed Waiting(计时等待)

  • Terminated(被终止)

任何线程任一时刻只会有一种状态

1.New

新建线程 new Thread() 就是New状态

2.Runnable

可运行的 调用线程start方法 有可能有两种状态 Ready 准备阶段,Running 运行阶段

3.Blocked

只有关键字synchronized 未获取到monitor锁的线程会进入到Blocked状态,

其他锁 AQS 会进入Waiting状态 获取到moitor锁会进入Runnable状态

4.Waiting

有以下情况会进入等待状态

  1. 当前线程调用无参object.wait() wait方法与synchronized锁一起使用,同样

    notify() :随机唤醒线程。

    notifyAll():后进先出唤醒线程。

    也必须在synchronized代码块里执行。

    wait被唤醒以后会进入Blocked状态(因为必须在synchronized代码里调用),获取锁会进入Runnable状态。

  2. 当前线程调用无参Thread.join()。

    join()执行结束会进入Runnable状态

  3. 当前线程调用无参LockSupport.park()。

    LockSupport.unpark() 会进入Runnable状态。

5.Timed Waiting

以下会进入计时等待

  1. Thread.sleep(long time)

  2. object.wait(long time)

  3. LockSupport.parkUtil(long time) LockSupport.parkNancos(long time)

  4. Thread.join(long time)

    状态转换与Waiting情况相同。

6.Terminated
  1. 线程运行结束,正常结束。
  2. 线程抛出异常,被终止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值