synchronized 和 Lock 有什么区别?
-
来源不同
- synchronized是java中的一个关键字,它的源码由JVM提供,使用C++语言实现
- Lock是J.U.C包中提供的一个接口,它的源码是JDK提供的,使用java语言实现,里面有很多的实现类,比如ReentrantLock,ReentrantReadWriteLock等
-
使用层面
- synchronized代码执行完自动释放锁,Lock需要在finally中用unlock手动释放锁
- synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁
- 二者都属于悲观锁,都是可重入的,但是Lock锁的功能要丰富,比如公平锁,可打断,可超时等。
-
如何选取
- 竞争不大的时候选取synchronized
- 竞争激烈的情况下选取Lock
参考回答