是 JUC 的核心之一,AQS 的 await()、signal() 等方法底层就是 LockSuport 实现的
实现线程挂起和唤醒的操作,和每个线程关联一个许可(permit),核心方式就是 park 和 unpark,底层是 Unsafe 类的 native 方法实现;类似 object 的 wait 和 notify/notifyAll 方法
核心方法
方法 | 解释 | 备注 |
---|---|---|
park() | 阻塞线程 | 当前线程没有令牌就一直阻塞 |
parkNanos(long nanos) | 阻塞线程多少纳秒 | 时间结束或有令牌将唤醒(相对时间) |
parkUntil(long deadline) | 阻塞线程到具体时间 | 到了时间或有令牌将唤醒(绝对时间) |
unpark(Thread t) | 给指定线程颁发令牌 |
用法示例
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("1");
// 调用park方法,挂起自己
LockSupport.park();
System.out.println("3");
});
thread.start();
Thread.sleep(1000);
System.out.println("2");
// 调用 unpark 方法让 thread 线程持有许可证,然后 park 方法返回
LockSupport.unpark(thread);
}
标签:令牌,Thread,thread,park,unpark,线程,LockSuport
From: https://www.cnblogs.com/hangychn/p/17405697.html