Java中的park方法是LockSupport类提供的线程阻塞工具,用于暂停当前线程直至被唤醒。1. park()阻塞线程,直到其他线程调用unpark()、线程被中断或虚假唤醒;unpark()提前调用也有效,因每个线程有最多一个许可。2. 与wait/notify不同,park/unpark无需锁、不抛异常,可先发unpark再park。3. 可结合Thread.interrupted()检测中断。4. 常用于实现AQS、ReentrantLock等同步器及线程协作。该机制简洁高效,适用于底层并发控制。

Java 中的 park 方法是 java.util.concurrent.locks.LockSupport 类提供的一个底层线程阻塞工具,用于暂停当前线程,直到被其他线程唤醒。它常用于构建高级同步器(如 AQS)中,不依赖 synchronized 或 Object.wait/notify 机制。
1. 基本用法:park() 和 unpark()
park() 会阻塞当前线程,直到发生以下情况之一:- 另一个线程调用当前线程的
unpark(Thread t) - 当前线程被中断
- 虚假唤醒(极少见)
示例代码:
Thread worker = new Thread(() -> { System.out.println("线程开始执行"); LockSupport.park(); // 阻塞在这里 System.out.println("线程被唤醒"); }); worker.start(); try { Thread.sleep(1000); } catch (InterruptedException e) {} System.out.println("主线程发送 unpark"); LockSupport.unpark(worker); // 唤醒 worker 线程输出结果:
家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l
主线程发送 unpark
线程被唤醒
2. park() 的特点
与 wait/notify 不同,park/unpark 更灵活:- unpark 可以在 park 之前调用 —— 如果先调用 unpark,再调用 park,线程不会阻塞(因为“许可”已存在)
- 每个线程都有一个与之关联的“许可”(permit),最多为1(不会累加)
- 不需要获取锁就可以调用
- 不会抛出 InterruptedException,但可通过
Thread.interrupted()检测中断状态
3. 带中断检测的 park
如果你希望在中断时做出响应,可以结合中断标志判断: Thread t = new Thread(() -> { System.out.println("运行中..."); LockSupport.park(); if (Thread.currentThread().isInterrupted()) { System.out.println("被中断了"); } else { System.out.println("被 unpark 唤醒"); } }); t.start(); try { Thread.sleep(1000); } catch (InterruptedException e) {} t.interrupt(); // 中断线程4. 常见使用场景
park/unpark 主要用于:- 实现自定义锁或同步器(如 ReentrantLock 内部使用)
- 线程协作控制,比如工作线程等待任务
- 避免使用 wait/notify 的复杂锁逻辑
基本上就这些。park 方法简单但强大,适合底层并发控制。










