面试题:ReentrantLock和Atomic使用场景

发布于 2022-09-03 12:06:18 字数 62 浏览 30 评论 0

在面试的时候,面试官提出了让比较ReentrantLock和Atomic两者的适用场景,欢迎各路大神前来解答。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

☆獨立☆ 2022-09-10 12:06:18

你说的Atomic是指Synchronized吗,个人浅见是:

  1. Synchronized比ReentrantLock进java标准早,因此一开始大家都是用它。相当于Java提供了一种封装的互斥锁机制,对于用户来说,声明成synchronized就可以拿到锁的能力,而不用管具体是怎么加锁解锁的

  2. 使用简便也是双刃剑,synchronized的粒度较粗,可控性较差。比如无法中断一个正在等候获得锁的线程,也无法通过投票得到锁等等。很多场景不是一个互斥锁就能搞定的。

  3. 所以Java搞了个java.util.concurrent.locks.Lock的接口,并实现了各种类型的锁,其目的就是为了适应各种不同场景下的锁需求,ReenTrantLock就是其中的一种。

  4. ReenTrantLock也是一种互斥锁,但它比Synchronized

    • 提供了更多功能,比如tryLock,拿不到锁立即返回等

    • 可伸缩性更强。可伸缩性意味着在锁竞争的时候能够在调度上少花时间,提高吞吐率,更高效利用CPU

    • 可编程性强,它是一个锁对象,可以在代码里面传来传去,比较灵活

  5. 不过ReenTrantLock用起来肯定没有Synchronized方便,要显式解锁,一旦忘了就麻烦了

天煞孤星 2022-09-10 12:06:18

Atomic是指AtomicInteger吧?这种可以保证诸如在多线程下实现i++这样的功能,这个应该是用的最多的,因为传统的int类型的i++并不是原子操作。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文