栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用ReentrentLock和Synchronized(object)有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用ReentrentLock和Synchronized(object)有什么区别?

我想知道使用

ReentrantLock
和会有很大的不同
synchronized (object)

主要区别在于:

  • synchronized
    锁定/解锁绑定到源代码的块结构。
    synchronized
    无论您如何执行此操作,退出块时都会释放一个锁。例如,如果块由于意外的异常而终止,它将被释放。

使用显式锁定不是这种情况,因此您可以在一种方法中获取一个

ReentrantLock
(或任何其他
Lock
)并在另一种方法中释放它。但另一方面,您
必须
记住
Lock
在适当的时间/地点显式释放。如果不这样做,您将最终陷入困境,甚至陷入僵局。简而言之,
ReentrantLock
它更复杂,并且更容易出错。

  • 您获得的原始锁定

    synchronized
    可用于
    Object.wait()
    Object.notify()
    Lock
    不。

  • ReentrantLock
    可以将A 创建为“公平”的,这意味着等待获取给定锁的线程将按fifo顺序获取锁。原始锁是不公平的。

  • ReentrantLock
    API的方法可用于测试锁是否正在使用,找出锁队列的长度,尝试不加阻塞地获取锁以及其他各种方法。此功能均不可用于原始锁。

为什么将其称为可重入锁?允许来自同一线程的递归调用?

可重入锁允许持有锁的线程再次获取它。可能发生这种情况的一种方法是通过递归,但是还有其他方法。

作为记录,

synchronized
锁也是可重入的,因此您不必担心递归或线程可能获取其已持有的锁的其他情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号