Java锁之公平和非公平锁

Java锁之公平和非公平锁


目录

  1. 公平锁和非公平锁概念
  2. 公平锁和非公平锁区别
  3. ReentrantLock和synchronized是公平锁还是非公平锁?

1. 公平锁和非公平锁概念


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

2. 公平锁和非公平锁区别


  1. 公平锁:Threads acquire a fair lock in which they requested
  2. 公平锁:就是很公平,在并发坏境中.每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁.否则就会加入到等待队列中.以后会按照FIFO的规则从队列中取到自己。
  3. 非公平锁:a nonfair lock permis 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.
  4. 非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。

3. ReentrantLock和synchronized是公平锁还是非公平锁?


  1. Java ReentrantLock 而言,通过构造函数指定该锁是否为公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。源码如下
 Lock lock = new ReentrantLock();

点进去源码截图:
在这里插入图片描述
默认为非公平锁,当我们传入true参数后,源码为

Lock lock = new ReentrantLock(true);

点进去源码为:
在这里插入图片描述

  1. 对于synchronized而言,也是一种非公平锁
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值