java.lang.Thread.State: WAITING (parking)

Java 中的 java.lang.Thread.State: WAITING (parking) 状态表示线程当前处于等待状态,等待某些条件的满足而被阻塞。具体来说,(parking) 表示线程因为调用了 LockSupport.park() 方法而被阻塞,这是 Java 并发编程中用于线程阻塞的一种机制。

主要解释如下:

  1. WAITING 状态

    • 线程在 WAITING 状态表示它正在等待某些特定的条件满足。这可能是因为调用了某些需要等待结果的方法,如 Object.wait()Thread.join(),或者在并发编程中的其他同步工具。
  2. parking

    • parking 表示线程使用了 LockSupport.park() 方法进行阻塞。这种阻塞方式通常是通过调用 LockSupport.unpark() 来解除阻塞,以响应特定的条件或信号。

示例代码:

java
import java.util.concurrent.locks.LockSupport; public class WaitingThreadExample { public static void main(String[] args) throws InterruptedException { Thread waitingThread = new Thread(() -> { System.out.println("Thread is going to park..."); LockSupport.park(); // 线程阻塞 System.out.println("Thread is unparked!"); }); waitingThread.start(); Thread.sleep(1000); // 让主线程等待一段时间 LockSupport.unpark(waitingThread); // 解除线程的阻塞 } }

在上述示例中,线程 waitingThread 在启动后调用了 LockSupport.park() 方法被阻塞,直到主线程调用 LockSupport.unpark(waitingThread) 方法解除阻塞。此时,线程状态将从 WAITING (parking) 转换为活跃状态。

这种状态常见于需要线程等待特定条件的多线程编程环境中,如线程间的同步和通信。