1.synchronized是java中的关键字,而Lock是一个接口;
2.synchronized是隐式的加锁(超出作用范围自动释放),lock是手动显式的加锁,手动的释放锁;
3.synchronized可以作用于方法上,和代码块上;而lock只能作用于方法块;
4.synchronized底层采用的是objectMonitor,lock采用的AQS;
5.synchronized是阻塞式加锁,lock是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁;
6.synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列;
7.synchronized只支持非公平锁,lock支持非公平锁和公平锁(构造方法中加true);
8.synchronized使用了object类的wait和notify进行等待和唤醒, lock使用了condition接口进行等待和唤醒(await和signal);
9.lock支持个性化定制, 使用了模板方法模式,可以自行实现lock方法;
10.synchronized发生异常时,会自动的释放线程占有的锁,而lock锁没有显示的释放锁,则可能会造成死锁,因此lock的锁释放需要在finally中。