synchronized 和 Lock 有什么区别?【自学Java准备面试】【自用】

63 阅读1分钟

synchronized 和 Lock 有什么区别?

synchronized和lock的区别.jpg

  • 来源不同

    • synchronized是java中的一个关键字,它的源码由JVM提供,使用C++语言实现
    • Lock是J.U.C包中提供的一个接口,它的源码是JDK提供的,使用java语言实现,里面有很多的实现类,比如ReentrantLock,ReentrantReadWriteLock等
  • 使用层面

    • synchronized代码执行完自动释放锁,Lock需要在finally中用unlock手动释放锁
    • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁
    • 二者都属于悲观锁,都是可重入的,但是Lock锁的功能要丰富,比如公平锁,可打断,可超时等。
  • 如何选取

    • 竞争不大的时候选取synchronized
    • 竞争激烈的情况下选取Lock

参考回答

image.png