一、语法层面
synchronize是关键字,是基于c++实现的。
lock是接口,源码由jdk提供,语言使用Java实现的。
synchronize使用时,退出同步代码块锁就会同步释放,但是lock使用时,需要自己手动去使用锁,调用unlock方法。
二、功能方面
他们两个都属于悲观锁,都有锁重入、同步、互斥。
lock提供了很多synchronize不具备的功能,锁打断、锁超时、公平锁,多条件变量
三、性能方面
在没有竞争的时候,synchronize做了很多优化(偏向锁、轻量级锁),性能不错;
在竞争激烈的时候,lock会提供更好的性能