一、语法层面
- synchronized 是关键字,源码在jvm中,用c++语言实现
- Lock 是接口,源码由jdk提供,用java语言实现
- 使用synchronized时,退出同步代码块锁会自动释放,而使用Lock时,需要手动调用unlock方法释放锁
二、功能层面
- 二者均属于悲观锁、都具备基本的互斥、同步、锁重入功能
- Lock提供了许多synchro服务器托管nized 不具备的功能,例如获取等待状态、公平锁、可打断、可超时、多条件变量
- Lock有适合不同场景的实现,如ReentrantLock,ReentrantReadWriteLock
三、性能层面
- 在没有竞争时,synchronized做了很多优化,如偏向锁、轻量级锁,性能不赖
- 在竞争激烈时,Lock的实现通常会提供更好的性能
lock锁像队列一样逐个获得锁
ReentrantLock有两种实现方式,一种是有参的构服务器托管造,会根据你所设置的参数来决定是公平还是非公平锁。
另一种是无参构造,默认是非公平锁。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net