【并发编程篇16】Synchronized与Lock区别

26 阅读1分钟

语法层面

  • Synchronized是关键字,是C++语言实现;

  • Lock是接口,由java语言实现。

  • 使用Synchronized时,退出同步代码块会自动释放锁,而使用Lock时,需要手动调用unlock方法释放锁

功能层面

  • 都是属于悲观锁,具备互斥、同步、锁重入功能

  • Lock提供了许多Synchronized不具备的功能,如:公平锁、可打断、可超时、多条件变量

  • Lock有适合不同场景的实现:ReentrantLock、ReentrantReadWriteLock

性能层面

在没有竞争时,synchronized做了很多优化,如偏向锁、轻量级锁,性能还可以。

在竞争激烈时,Lock的实现通常会提供更好的性能