以ReentrantLock为例,分析Java并发编程中公平锁和非公平锁的实现;

本文通过ReentrantLock实例分析公平锁和非公平锁的概念与区别。公平锁遵循先到先得原则,线程按顺序获取锁;而非公平锁则不保证线程获取锁的顺序,可能存在线程饥饿现象。在ReentrantLock的源码中,公平锁通过AQS的acquireQueued方法确保线程按顺序获取锁,而非公平锁则在尝试获取锁时直接进行CAS操作,增加了获取锁的机会,但可能导致不公平。
摘要由CSDN通过智能技术生成

概念解释: 

公平锁,指的是在进行锁的竞争中,没有获得锁的线程,当锁被释放时,会按照竞争线程的先后顺序依次进行锁的获取,先到先得,体现公平性;

非公平锁,指的是锁释放后,竞争锁的线程不会按照先后顺序来获取被释放的锁,结果具有随机性,故不体现公平性;

实例分析: 以ReentrantLock 为例,分别实现公平锁及非公平锁案例;

/***
 * 公平锁实现:
 * ReentrantLock 构造方法中可以设置为true,代表公平锁,false,代表非公平锁;
 *
 * 实例逻辑:
 * 主线程占用锁,并创建10个子线程分别命名为1-10,依次竞争主线程的锁,主线程释放,查看子线程名称打印结果是否有序;
 *
 * (注:这里的代码暂时认为锁的释放前不会出现异常,但是实际开发中释放锁的操作可能需要放到finally中;)
 *
 * */

public class FairLock {

    private static ReentrantLock reentrantLock = new ReentrantLock(true);

    public static void main(String[] args) {
        System.out.println(" -- Main Thread Start -- ");
        reentrantLock.loc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值