美文网首页Java开发那些事其他零散知识点
synchronized 和 ReentrantLock 的区别

synchronized 和 ReentrantLock 的区别

作者: 9980b59c0f07 | 来源:发表于2019-07-16 00:29 被阅读228次

    ① 两者都是可重入锁

    “可重入锁”概念是:自己可以再次获取自己的内部锁。比如,一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁时,还可以再获取的;如果不可锁重入的话,就会造成死锁;同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时,才能最终释放锁。

    ② synchronized 依赖于 JVM,而 ReentrantLock 依赖于 API

    synchronized 是依赖于 JVM 实现的,Java 虚拟机团队在 JDK1.6 为 synchronized 关键字进行了很多的优化,但这些优化都是在虚拟机层面实现的,并没有直接暴露给我们。ReentrantLock 是 JDK 层面实现的(也就是 API 层面,需要 lock() 和 unlock() 方法配合 try/finally 语句块来完成),可以通过查看它的源代码,来看它是如何实现的。

    ③ ReentrantLock 比 synchronized 增加了一些高级功能

    相关文章

      网友评论

        本文标题:synchronized 和 ReentrantLock 的区别

        本文链接:https://www.haomeiwen.com/subject/jgyakctx.html