JUC之公平锁与非公平锁

本文详细探讨了公平锁与非公平锁的概念,对比两者在并发环境中的表现。公平锁确保线程按请求顺序获取锁,而非公平锁允许后来线程优先获取,可能提升吞吐量但存在饥饿风险。ReentrantLock默认为非公平锁。

公平锁与非公平锁

首先,公平锁与非公平锁谈谈你的理解?

1.公平和非公平锁是什么?

公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到
非公平:是指多个线程获取锁的顺序并不是按照申请锁的顺序来获取锁,有可能后申请的线程比先申请的线程优先获取锁
               在高并发的情况下,有可能会造成优先级反转或者饥饿现象

并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认为非公平锁

关于俩者区别
公平锁:Threads acquire a fair lock in the order in which they requested
就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,
以后会按照FIFO的规则从队列中取到自己


非公平锁:a nonfair lock permits barging:threads requesting a lock can jump ahead of the queue of waiting threads if the lock happens to be available when it is requested
非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,句在采用类似公平锁那种方式。

 

Java ReentrantLock而言
通过构造函数指定该锁是否是公平锁,默认非公平锁,非公平锁优点在于吞吐量比公平锁大

对于Synchronized而言,也是一种非公平锁

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值