- synchronized属于Java中内置关键字,lock是基于aqs封装的锁。
- synchronized在代码执行完毕后或者抛出异常后自动释放锁,lock需要手动释放锁,lock/unlock,可扩展性比较高。
- 都是属于控制多线程对共享对象的访问
- 都是可重入锁
- 都保证了可见性与互斥性
- lock的ReentrantLock 可以定义公平锁
- Lock可以通过api知道有没有成功获取锁,synchronized的则不可以
- synchronized是同步阻塞,采用的悲观并发策略
- lock是同步非阻塞,采用的乐观并发策略