JUC:LockSuport

发布时间 2023-05-24 16:58:50作者: 黄光跃

是 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);
}