共同点:
- 协调多线程对共享对象、变量的访问
- 都是可重入的,同一线程可以多次获得同一个锁
- 都保证了可见性和互斥性
不同点:
- ReentrantLock是API级别,synchronized是JVM级别的
- ReentrantLock可以实现公平锁
- 一个ReentrantLock对象可以绑定多个Connection对象
- ReentrantLock有等待可中断特性--当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情
- 底层实现不一样,synchronized是同步阻塞,使用的是悲观并发策略。lock是同步非阻塞,采用的是乐观并发策略