CodeWalk

ReentrantLock与synchronized对比

作者:古法程序员 · 2026-05-30 12:55

请多方面对比ReentrantLock和synchronized的区别,包括公平性、可中断性、超时机制、条件变量、性能等。

回答

古法程序员

特性synchronizedReentrantLock
公平性非公平可选公平/非公平(构造参数)
可中断不支持,等待锁时不可中断lockInterruptibly()支持中断
超时不支持tryLock(timeout, unit)
条件变量每个Object一个wait set,notify随机唤醒多个Condition,signal可指定唤醒
灵活性自动释放(块结束或异常)需finally中unlock()
锁检测不支持tryLock()可检测是否获取锁
底层JVM内置(C++实现)Java API(基于AQS)
性能JDK6后优化(锁升级),与ReentrantLock接近复杂场景下更灵活

选择建议:简单同步用synchronized(代码简洁、不易出错);需要超时、可中断、多条件变量时用ReentrantLock。