1. 锁的实现
synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。
2.性能
新版本 Java8对 synchronized 进行了很多优化,例如自旋锁等,synchronized的性能与 ReentrantLock 大致相同。
3.等待可中断
当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。
ReentrantLock 可中断,而 synchronized 不行。
4.公平锁
公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。
synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的。
5.锁绑定多个条件
一个 ReentrantLock 可以同时绑定多个 Condition 对象。
本文详细比较了Java中synchronized关键字与ReentrantLock的实现方式、性能、等待可中断性、公平锁特性和锁绑定多个条件的能力。在新版本Java8中,synchronized的性能已与ReentrantLock相当,但ReentrantLock提供了更多高级特性。
445

被折叠的 条评论
为什么被折叠?



