LockSupport.park() 方法 LockSupport.unpark(Thread) #限
时间: 2023-05-28 16:02:12 浏览: 193
LockSupport.park() 方法是一个用于阻塞当前线程的工具方法,使该线程在等待被唤醒前一直处于等待状态。
LockSupport.unpark(Thread) 方法则是唤醒指定线程的工具方法,使该线程从挂起状态中返回并继续执行。注意,调用 unpark 方法可能会让下一次的 park 方法直接返回,而不需要等待。
相关问题
LockSupport.park() 方法使用示例
LockSupport.park() 方法是 Java 并发工具包中提供的一种线程阻塞工具,它可以让当前线程阻塞并等待其他线程唤醒它。LockSupport.park() 方法的作用是阻塞当前线程,使其等待其他线程唤醒。
LockSupport.park() 方法可以在任何地方使用,不必在同步块中调用,而且可以在任何时候调用。LockSupport.park() 方法返回时,线程将会被唤醒,如果没有被唤醒的情况下,线程将会一直阻塞。
LockSupport.park() 方法的使用示例如下:
```java
public class LockSupportDemo {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "开始执行");
// 线程阻塞
LockSupport.park();
System.out.println(Thread.currentThread().getName() + "被唤醒");
});
t.start();
// 主线程等待 1 秒后唤醒 t 线程
Thread.sleep(1000);
System.out.println("主线程唤醒 t 线程");
LockSupport.unpark(t);
}
}
```
输出结果如下:
```
Thread-0开始执行
主线程唤醒 t 线程
Thread-0被唤醒
```
在该示例中,我们创建了一个新线程 t,并在该线程中调用了 LockSupport.park() 方法使该线程阻塞。然后,主线程等待 1 秒后调用 LockSupport.unpark(t) 方法唤醒线程 t。
注意,LockSupport.park() 方法会响应中断,也就是说如果线程在阻塞期间被中断了,该方法也会返回,但是不会抛出 InterruptedException 异常。
LockSupport.park()实现机制
LockSupport.park()是Java并发编程中的一个工具类,用于线程阻塞。其实现机制主要依赖于Unsafe类和操作系统提供的底层支持。
以下是LockSupport.park()的大致实现过程:
1. 获取当前线程的Thread对象,然后调用Thread类中的park()方法进行阻塞。
2. park()方法会调用Unsafe类中的park()方法,该方法会将当前线程放入等待队列中,并且阻塞该线程。
3. 当需要唤醒该线程时,调用LockSupport.unpark()方法,并将需要唤醒的线程作为参数传入。
4. unpark()方法会调用Unsafe类中的unpark()方法,该方法会将指定的线程从等待队列中移除,并解除该线程的阻塞状态。
总之,LockSupport.park()方法最终还是通过Unsafe类和操作系统提供的底层支持来实现线程的阻塞和唤醒。