语法层面
-
Synchronized是关键字,是C++语言实现;
-
Lock是接口,由java语言实现。
-
使用Synchronized时,退出同步代码块会自动释放锁,而使用Lock时,需要手动调用unlock方法释放锁
功能层面
-
都是属于悲观锁,具备互斥、同步、锁重入功能
-
Lock提供了许多Synchronized不具备的功能,如:公平锁、可打断、可超时、多条件变量
-
Lock有适合不同场景的实现:ReentrantLock、ReentrantReadWriteLock
性能层面
在没有竞争时,synchronized做了很多优化,如偏向锁、轻量级锁,性能还可以。
在竞争激烈时,Lock的实现通常会提供更好的性能