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

    image.png