Java并发之公平锁
概述
CPU在调度线程的时候,会在等待队列里随机挑选一个线程。由于随机性,故不能保证线程先到先得(synchronized控制的锁就是这种非公平锁)。这样就会产生饥饿现象,即有些优先级较低的线程可能永远无法取得CPU的执行权,优先级较高的线程会不断抢占资源。于是,就有了公平锁。
公平锁可以保证线程按照时间顺序执行,避免饥饿现象的产生。但是公平锁的效率很低,因为要保证顺序执行,就得维护一个有序队列。
ReentrantLock创建公平、不公平锁
ReentrantLock便是公平锁,通过在构造方法中传入true就是公平锁,传入false就是非公平锁。当然,默认false
public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();}
使用公平锁实现效果:
public class LockFairTest implements Runnable {//创建公平锁private static ReentrantLock lock = new ReentrantLock(true);@Overridepublic void run() {while (true){lock.lock();try {System.out.println(Thread.currentThread().getName()+"获得锁");}finally {lock.unlock();}}}public static void main(String []args){LockFairTest lockFairTest = new LockFairTest();Thread t1 = new Thread(lockFairTest);Thread t2 = new Thread(lockFairTest);t1.start();t2.start();}
}
结果应该显而易见了,两个线程交替执行。
Java并发之公平锁相关推荐
- Java并发之ReentrantLock锁
简介 一种可重入的互斥锁,经由Java5引入,支持一个线程对资源的重复加锁.它和synchronized语句和方法访问的隐式监视器锁,有相同的基本行为和语义,但是功能更强大.之所以存在synchron ...
- java并发锁有哪些,Java并发编程-公平锁与非公平锁
写这个文章的时候让我想起了让子弹飞的一个台词 公平,公平,还是tmd公平! 什么是公平和非公平 首先,我们来看下什么是公平锁和非公平锁. 公平锁指的是按照线程请求的顺序,来分配锁: 非公平锁指的是不完 ...
- Java中的公平锁和非公平锁实现详解
文章目录 前言 ReentrantLock的可重入性分析 synchronized的可重入性 ReentrantLock的可重入性 ReentrantLock锁的实现分析 公平锁和非公平锁 公平锁Fa ...
- java 饥饿现象,Java并发之“饥饿”和“公平锁”(Starvation and Fairness)
饥饿发生的原因: 高优先级的线程占用了大部分的cpu时间,低优先级线程发生饥饿 线程被永久堵塞在一个等待进入同步块的状态 线程在等待一个本身(在其上调用wait())也处于永久等待完成的对象 java ...
- 公平锁和非公平锁介绍,为什么要“非公平”?
什么是公平和非公平 公平锁指的是按照线程请求的顺序,来分配锁:而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队.但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而是仅 ...
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- java公平索非公平锁_Java 并发编程中使用 ReentrantLock 替代 synchronized
Java 5 引入的 Concurrent 并发库软件包中,提供了 ReentrantLock 可重入同步锁,用来替代 synchronized 关键字原语,并可提供更好的性能,以及更强大的功能.使用 ...
- java公平所与非公平所_一张图读懂Java非公平锁与公平锁
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820- 种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Ja ...
- java投票锁_Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...
最新文章
- 《编译与反编译技术实战 》一2.3 编译器的设计与实现概述
- LR运行9415商品拒绝问题
- Windows10 热点(WIFI)配置教程
- Node.js使用supervisor遭遇‘supervisor’不是内部或外部命令,如果解决?
- 当面试官要你介绍一下MQ时,该怎么回答?
- 麦克风阵列语音增强(一)
- 微信怎么收银行卡的消息服务器,微信零钱提现,这样操作,可以免去手续费
- 浏览器打开服务器图片不显示图片,网页图片不显示的原因 世界之窗浏览器网页显示不正常...
- python远程监控_Python实现远程端口监控实例
- Matlab实现指纹去噪增强
- 【WCN6856】WiFi 5G 接口启动失败问题解决
- 【每日一题】打卡 12
- 工程师解说raid6结构和原理
- 宇视科技android面试_浙江宇视科技有限公司面试经验
- 广义表,长度是( ),深度是( )
- 计算机故障代码ff,电脑DEBUG长代码显示FF故障检修
- 人脸检测的测试程序(视频和摄像头)
- 并网光伏逆变器的基本设计
- C Primer Plus 第六版---编程练习2
- 《医院管理系统》项目研发总结