Java线程的六种状态

  1. NEW(新建)

    • 含义:线程对象已经被创建,但还没有调用 start() 方法。
    • 状态切换条件:调用 start() 方法后,线程从 NEW 状态切换到 RUNNABLE 状态。
  2. RUNNABLE(可运行)

    • 含义:线程处于可运行状态,它可能正在运行,也可能在等待 CPU 时间片。
    • 状态切换条件
      • 线程从 NEW 状态调用 start() 方法后进入 RUNNABLE 状态。
      • 线程可能因为调度程序选择它执行而处于 RUNNABLE 状态。
      • 如果线程被中断或者等待资源被释放,可能会从 BLOCKEDWAITING 或 TIMED_WAITING 状态返回 RUNNABLE 状态。
  3. BLOCKED(阻塞)

    • 含义:线程在等待获取一个对象的监视器锁(synchronized 块或者方法),此时线程不会运行。
    • 状态切换条件
      • 线程尝试进入一个同步代码块或者方法时,如果锁被其他线程持有,线程会进入 BLOCKED 状态。
      • 一旦获取到锁,线程会从 BLOCKED 状态切换到 RUNNABLE 状态。
  4. WAITING(等待)

    • 含义:线程在等待其他线程执行特定操作(如调用 Object.wait() 方法)来唤醒它。
    • 状态切换条件
      • 线程在调用 Object.wait() 方法时会进入 WAITING 状态。
      • 通过 notify() 或 notifyAll() 方法唤醒等待的线程,线程会从 WAITING 状态切换到 RUNNABLE 状态。
      • 线程也可能因为中断而退出 WAITING 状态,进入 RUNNABLE 状态。
  5. TIMED_WAITING(计时等待)

    • 含义:线程在等待特定时间后自动回到 RUNNABLE 状态,或在等待期间可能会被中断。
    • 状态切换条件
      • 线程在调用 Thread.sleep(long millis)Object.wait(long timeout)Thread.join(long millis) 或 LockSupport.parkNanos(long nanos) 等方法时会进入 TIMED_WAITING 状态。
      • 超过等待时间或调用 notify() 或 notifyAll() 方法时,线程会从 TIMED_WAITING 状态切换到 RUNNABLE 状态。
  6. TERMINATED(终止)

    • 含义:线程已经完成执行或因为异常终止。
    • 状态切换条件
      • 线程的 run() 方法执行完毕或者抛出未捕获的异常时,线程进入 TERMINATED 状态。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值