ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ReentrantLock锁是公平锁吗?

2024-01-10 22:12:22  阅读:48  来源: 互联网

标签:


ReentrantLock 在默认情况下是非公平锁,但也可以通过构造函数显式指定为公平锁。

在非公平锁模式下,当多个线程竞争同一个锁时,锁将被随机分配给任意一个等待的线程,不考虑线程等待的时间长短。这意味着,新到来的线程有很大概率能够在旧线程之前获取到锁。

而在公平锁模式下,当多个线程竞争同一个锁时,锁将按照线程请求的先后顺序(即FIFO)依次分配给等待的线程,确保线程按照排队的顺序获得锁。

要创建一个公平锁的 ReentrantLock 对象,可以使用带有 fair 参数的构造函数。例如:

ReentrantLock fairLock = new ReentrantLock(true); // 公平锁

Java

而如果不指定 fair 参数或者指定为 false,则为非公平锁。

需要注意的是,公平锁通常会导致更多的上下文切换和性能开销,因为它需要维护线程等待的顺序,而非公平锁则没有这个额外的开销。因此,在选择公平锁还是非公平锁时,需要根据具体情况进行权衡,根据应用程序的需求和性能要求来决定。默认情况下,非公平锁通常能够提供更高的吞吐量,但可能会导致某些线程饥饿地等待锁。

总结:ReentrantLock 的默认锁模式是非公平锁,但可以通过构造函数显式指定为公平锁。

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有