Java 线程状态

 Java 线程状态

  1. 新建(New)

    • 这是线程被创建但还未启动的初始状态。
    • 当创建了一个线程对象,但尚未调用其 start() 方法时,线程处于新建状态。
  2. 可运行(Runnable)

    • 表示线程正在 JVM 中执行或准备好执行的状态,包括正在执行、等待 CPU 时间片、等待阻塞结束等情况。
    • 线程进入可运行状态的条件包括:
      • 调用线程的 start() 方法后,线程开始执行。
      • 等待 CPU 时间片,处于就绪状态。
      • 等待阻塞结束,例如等待 synchronized 块的锁或等待 wait() 方法被唤醒。
  3. 阻塞(Blocked)

    • 表示线程因为某些原因而暂时无法继续执行,处于等待某个条件的状态。
    • 线程进入阻塞状态的条件包括:
      • 等待 synchronized 块的锁。
      • 调用了 Object.wait() 方法,等待被唤醒。
      • 等待输入/输出完成。
  4. 等待(Waiting)

    • 表示线程处于等待某个条件的状态,需要其他线程显式地通知才能继续执行。
    • 线程进入等待状态的条件包括:
      • 调用了 Object.wait() 方法。
      • 调用了 Thread.join() 方法,等待被等待线程执行完成。
      • 调用了 LockSupport.park() 方法。
  5. 超时等待(Timed Waiting)

    • 表示线程处于等待某个条件的状态,但是允许设置等待时间,在等待超时之后会自动恢复。
    • 线程进入超时等待状态的条件包括:
      • 调用了 Thread.sleep() 方法,等待指定时间。
      • 调用了 Object.wait(long timeout) 方法,等待被唤醒或者超时。
      • 调用了 Thread.join(long millis) 方法,等待被等待线程执行完成或者超时。
      • 调用了 LockSupport.parkNanos() 方法。
  6. 终止(Terminated)

    • 表示线程已经执行完毕或者因为异常退出了执行。
    • 线程进入终止状态的条件包括:
      • 线程的 run() 方法执行完毕。
      • 线程抛出了未捕获的异常而结束执行。

 Java 线程状态切换

在 Java 中,线程可以从一个状态转换到另一个状态,具体取决于线程的执行状态和外部条件。以下是线程状态之间的主要切换过程:

  1. 新建(New)到可运行(Runnable)

    • 当创建了一个线程对象后(即调用了 new Thread()),线程处于新建状态。
    • 调用线程的 start() 方法后,线程进入可运行状态,等待 CPU 时间片。
  2. 可运行(Runnable)到运行(Running)

    • 当线程获得 CPU 时间片后,进入运行状态,开始执行线程的 run() 方法。
  3. 运行(Running)到阻塞(Blocked)

    • 当线程需要等待某个条件的满足(如获取锁、等待输入输出完成、调用 Thread.sleep() 等)而无法继续执行时,线程会进入阻塞状态。
  4. 阻塞(Blocked)到可运行(Runnable)

    • 当线程等待的条件满足时,如获取到了锁或输入输出完成,线程会从阻塞状态切换回可运行状态,等待 CPU 时间片。
  5. 运行(Running)到终止(Terminated)

    • 线程执行完毕或抛出了未捕获的异常后,线程进入终止状态。
  6. 可运行(Runnable)到等待(Waiting)或超时等待(Timed Waiting)

    • 当线程调用 Object.wait() 方法、Thread.join() 方法或 LockSupport.park() 方法时,线程会进入等待状态或超时等待状态。
  7. 等待(Waiting)或超时等待(Timed Waiting)到可运行(Runnable)

    • 当线程等待的条件被其他线程满足、等待超时或者调用了 Thread.interrupt() 方法中断等待时,线程会从等待状态或超时等待状态切换回可运行状态。
  8. 等待(Waiting)或超时等待(Timed Waiting)到终止(Terminated)

    • 当线程处于等待状态或超时等待状态时,调用了 Thread.interrupt() 方法中断线程,或者等待的对象被销毁,线程会从等待状态或超时等待状态直接切换到终止状态。

你可能感兴趣的:(java,开发,java,开发语言)