java 公平锁和非公平锁区别
公平锁和非公平锁的区别
- 公平锁 指在分配锁前检查是否有线程在排队等待获取该锁,优先将锁分配给排队时间最长的线程
- 非公平锁 指在分配锁时不考虑线程排队等待的情况,直接尝试获取锁,在获取不到锁时再排到队尾等待
因为公平锁需要在多核的情况下维护一个锁线程等待队列,基于该队列进行锁的分配,因此效率比非公平锁低很多,java中的synchronized时非公平锁,ReentranLock默认的lock方法采用的时非公平锁。
读写锁:ReadWriteLock
- 在Java中通过Lock接口及对象可以方便的为对象加锁和释放锁,但是这种锁不区分读写,叫做普通锁。为了提供性能,Java提供了读写锁,读写锁分为读锁和写锁,在写的地方使用写锁,在没有写的地方,读时无阻塞的。
- 如果系统要求共享数据可以同事支持很多线程并发读,但不能支持很多线程并发写,那么使用读锁能很大程度地提高效率,如果系统要求共享数据在同一时刻只能有一个线程在写,再写的过程中不能读取共享数据,则需要使用写锁。
public class SeafCache{private final Map<String,Object> cache= new HashMap<String,Object>();private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();private final Lock readLock =rwlock.readLock();//step1:定义读锁private final Lock writeLock =rwlock.writeLock();//step2:定义写锁public Object get(String key){readLock.lock();try{return cache.get(key);}finally{readLock.unLock();}}
//step4:再写数据时加写锁
public Object put(String key,Object value){writeLock.lock();try{return cache.put(key,value);}finally{writeLock.lock();}
}}
共享锁和独占锁
- 独占锁:也叫互斥锁,每次只允许一个线程持有该锁,ReentrantLock为独占锁的实现
- 共享锁:允许多个线程同时获取该锁,并发访问共享资源。ReentrantReadWriteLock中的读锁为共享锁的实现。
ReentrantReadWriteLock的加锁和解锁操作最终都调用内部类Sync提供的方法。Sync对象通过继承AQS(Abstract Queued Synchronizer)进行实现。AQS的内部类Node定义了两个常量SHARED和EXCLUSIVE,费别标识AQS队列中等待线程的锁获取模式。
独占锁是一种悲观的枷锁策略,同一时刻只允许一个读线程读取锁资源,限制了读操作的并发性;因为并发读线程并不会影像数据的一致性,因此共享锁采用了乐观的枷锁策略,允许多个执行读操作的线程同时访问共享资源。
java 公平锁和非公平锁区别相关推荐
- Java面试突击:公平锁和非公平锁有什么区别?
从公平的角度来说,Java 中的锁总共可分为两类:公平锁和非公平锁.但公平锁和非公平锁有哪些区别?孰优孰劣呢?在 Java 中的应用场景又有哪些呢?接下来我们一起来看. 正文公平锁:每个线程获取锁的顺 ...
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- java公平所与非公平所_一张图读懂Java非公平锁与公平锁
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820- 种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Ja ...
- java投票锁_Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...
- java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...
- java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...
一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...
- Java面试之锁-公平锁和非公平锁
Java锁之公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 非公平锁 是指多个线程获取锁的顺序,并不是按照申请锁的顺 ...
- java公平锁和非公平锁_java并发编程学习之再谈公平锁和非公平锁
在java并发编程学习之显示锁Lock里有提过公平锁和非公平锁,我们知道他的使用方式,以及非公平锁的性能较高,在AQS源码分析的基础上,我们看看NonfairSync和FairSync的区别在什么地方 ...
- java并发锁有哪些,Java并发编程-公平锁与非公平锁
写这个文章的时候让我想起了让子弹飞的一个台词 公平,公平,还是tmd公平! 什么是公平和非公平 首先,我们来看下什么是公平锁和非公平锁. 公平锁指的是按照线程请求的顺序,来分配锁: 非公平锁指的是不完 ...
最新文章
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
- 推荐一个 Java 接口快速开发框架
- struts2 学习记录 之 国际化
- python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
- 1. jenkins常见错误及解决方法
- latex Label ‘ ‘ multiply defined
- unidac连接ORACLE免装客户端驱动
- 碰撞次数与π的关系问题程序求解
- html怎么使两张照片重叠,怎样把两张图片叠加在一起?
- 为什么显示D盘可用空间不多,但是明明包括隐藏文件也没有用那么多内存?(内含解决方案)
- 设计模式之禅【门面模式】
- 黑苹果制作Clover开机引导脱离U盘,小新Pro13详细教程
- 5张图,看懂数据分析体系
- 二十岁的男人(应该需要做什么)
- SCI论文写作辅助利器-知云文献翻译
- 在线 - 支持word上传的富文本编辑器
- 用C++开发STM32程序
- springMVC中拦截器执行时机和执行顺序分析
- 使用 FFmpeg 开发播放器基础--使用 ffmpeg 解码视频文件
- 使用HBuilderX下载插件及运行微信小程序