CodeWalk

wait/notify与park/unpark对比

作者:苦行僧 · 2026-05-30 12:55

请对比Object.wait/notify和LockSupport.park/unpark在用法、灵活性和安全性方面的差异。

回答

苦行僧

特性Object.wait/notifyLockSupport.park/unpark
前置条件必须在synchronized块中无需同步块
通知对象notify随机唤醒一个,notifyAll唤醒全部unpark精确唤醒指定线程
调用顺序wait必须先于notify,否则线程永远等待unpark可以先于park,线程不会阻塞(许可证机制)
中断处理抛出InterruptedException不抛异常,通过Thread.interrupted()检测
超时wait(timeout)毫秒级parkNanos()纳秒级
虚假唤醒可能出现,需while循环判断可能出现,需循环条件判断
可用性所有Java对象内置需LockSupport类

选择建议:简单场景用wait/notify;需要精确唤醒、灵活控制或非synchronized场景用LockSupport。AQS内部使用LockSupport。