公平锁和非公平锁的区别

  1. 公平锁 指在分配锁前检查是否有线程在排队等待获取该锁,优先将锁分配给排队时间最长的线程
  2. 非公平锁 指在分配锁时不考虑线程排队等待的情况,直接尝试获取锁,在获取不到锁时再排到队尾等待
    因为公平锁需要在多核的情况下维护一个锁线程等待队列,基于该队列进行锁的分配,因此效率比非公平锁低很多,java中的synchronized时非公平锁,ReentranLock默认的lock方法采用的时非公平锁。

读写锁:ReadWriteLock

  1. 在Java中通过Lock接口及对象可以方便的为对象加锁和释放锁,但是这种锁不区分读写,叫做普通锁。为了提供性能,Java提供了读写锁,读写锁分为读锁和写锁,在写的地方使用写锁,在没有写的地方,读时无阻塞的。
  2. 如果系统要求共享数据可以同事支持很多线程并发读,但不能支持很多线程并发写,那么使用读锁能很大程度地提高效率,如果系统要求共享数据在同一时刻只能有一个线程在写,再写的过程中不能读取共享数据,则需要使用写锁。
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();}
}}

共享锁和独占锁

  1. 独占锁:也叫互斥锁,每次只允许一个线程持有该锁,ReentrantLock为独占锁的实现
  2. 共享锁:允许多个线程同时获取该锁,并发访问共享资源。ReentrantReadWriteLock中的读锁为共享锁的实现。
    ReentrantReadWriteLock的加锁和解锁操作最终都调用内部类Sync提供的方法。Sync对象通过继承AQS(Abstract Queued Synchronizer)进行实现。AQS的内部类Node定义了两个常量SHARED和EXCLUSIVE,费别标识AQS队列中等待线程的锁获取模式。
    独占锁是一种悲观的枷锁策略,同一时刻只允许一个读线程读取锁资源,限制了读操作的并发性;因为并发读线程并不会影像数据的一致性,因此共享锁采用了乐观的枷锁策略,允许多个执行读操作的线程同时访问共享资源。

java 公平锁和非公平锁区别相关推荐

  1. Java面试突击:公平锁和非公平锁有什么区别?

    从公平的角度来说,Java 中的锁总共可分为两类:公平锁和非公平锁.但公平锁和非公平锁有哪些区别?孰优孰劣呢?在 Java 中的应用场景又有哪些呢?接下来我们一起来看. 正文公平锁:每个线程获取锁的顺 ...

  2. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  3. java公平所与非公平所_一张图读懂Java非公平锁与公平锁

    前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820- 种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Ja ...

  4. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...

  5. java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...

  6. java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...

    一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...

  7. Java面试之锁-公平锁和非公平锁

    Java锁之公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 非公平锁 是指多个线程获取锁的顺序,并不是按照申请锁的顺 ...

  8. java公平锁和非公平锁_java并发编程学习之再谈公平锁和非公平锁

    在java并发编程学习之显示锁Lock里有提过公平锁和非公平锁,我们知道他的使用方式,以及非公平锁的性能较高,在AQS源码分析的基础上,我们看看NonfairSync和FairSync的区别在什么地方 ...

  9. java并发锁有哪些,Java并发编程-公平锁与非公平锁

    写这个文章的时候让我想起了让子弹飞的一个台词 公平,公平,还是tmd公平! 什么是公平和非公平 首先,我们来看下什么是公平锁和非公平锁. 公平锁指的是按照线程请求的顺序,来分配锁: 非公平锁指的是不完 ...

最新文章

  1. python爬虫之Scrapy框架的post请求和核心组件的工作 流程
  2. 推荐一个 Java 接口快速开发框架
  3. struts2 学习记录 之 国际化
  4. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
  5. 1. jenkins常见错误及解决方法
  6. latex Label ‘ ‘ multiply defined
  7. unidac连接ORACLE免装客户端驱动
  8. 碰撞次数与π的关系问题程序求解
  9. html怎么使两张照片重叠,怎样把两张图片叠加在一起?
  10. 为什么显示D盘可用空间不多,但是明明包括隐藏文件也没有用那么多内存?(内含解决方案)
  11. 设计模式之禅【门面模式】
  12. 黑苹果制作Clover开机引导脱离U盘,小新Pro13详细教程
  13. 5张图,看懂数据分析体系
  14. 二十岁的男人(应该需要做什么)
  15. SCI论文写作辅助利器-知云文献翻译
  16. 在线 - 支持word上传的富文本编辑器
  17. 用C++开发STM32程序
  18. springMVC中拦截器执行时机和执行顺序分析
  19. 使用 FFmpeg 开发播放器基础--使用 ffmpeg 解码视频文件
  20. 使用HBuilderX下载插件及运行微信小程序

热门文章

  1. svn服务器项目同步,svn项目同步更新
  2. python代码对比数据
  3. 莱芜职业技术学院教育教学管理交流会圆满召开
  4. 嵌入式面试知识点总结 -- C语言篇
  5. HandyJson序列化和反序列化
  6. 收藏一下,图片翻译的网站
  7. 从新手小白到氪金大佬的“建站指南”
  8. 苹果上网本报价_聚划算疯了,这是要硬刚苹果吗
  9. 计算机在教育领域中的应用,计算机科学在计算机教育中的应用
  10. Fap-------一款基于.netcore3.0的企业级快速开发框架