点击关注公众号,实用技术文章及时了解

开发中遇到并发的问题一般会用到锁,Synchronized存在明显的一个性能问题就是读与读之间互斥;

ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有效地帮助减少锁竞争,以提升系统的性能。

ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁。

Java并发库中ReetrantReadWriteLock实现了ReadWriteLock接口并添加了可重入的特性。

读写锁ReentrantReadWriteLock:读读共享,读写互斥,写写互斥; 读写锁维护了一对锁,一个读锁,一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。在读多写少的情况下,读写锁能够提供比排他锁更好的并发性和吞吐量。

从源码中可以看出,读写锁中同样依赖队列同步器Sync(AQS)实现同步功能,而读写状态就是其同步器的同步状态。推荐:Java进阶视频资源

下面从例子中来说明:读读共享,读写互斥,写写互斥

代码如下:

public class ReentrantWriteReadLockTest {ReentrantReadWriteLock lock = new ReentrantReadWriteLock();ReadLock readLock = lock.readLock();WriteLock writeLock = lock.writeLock();public void read(){try {readLock.lock();System.out.println("线程"+Thread.currentThread().getName()+"进入。。。");Thread.sleep(3000);System.out.println("线程"+Thread.currentThread().getName()+"退出。。。");} catch (InterruptedException e) {e.printStackTrace();}finally{readLock.unlock();}}public void write(){try {writeLock.lock();System.out.println("线程"+Thread.currentThread().getName()+"进入。。。");Thread.sleep(3000);System.out.println("线程"+Thread.currentThread().getName()+"退出。。。");} catch (InterruptedException e) {e.printStackTrace();}finally{writeLock.unlock();}}public static void main(String[] args) {final ReentrantWriteReadLockTest wr = new ReentrantWriteReadLockTest();Thread t1 = new Thread(new Runnable() {public void run() {wr.read();}}, "t1");Thread t2 = new Thread(new Runnable() {public void run() {wr.read();}}, "t2");Thread t3 = new Thread(new Runnable() {public void run() {wr.write();}}, "t3");Thread t4 = new Thread(new Runnable() {public void run() {wr.write();}}, "t4");t1.start();t2.start();//t3.start();//t4.start();}
}

当我们启动线程t1和t2时,结果如下:

线程t1和t2可以同时进入,说明了读读共享

当我们启动线程t2和t3时,结果如下:

一个线程必须等待另一个线程退出,才能进入,说明了读写互斥

当我们启动线程t3和t4时,结果如下:

一个线程必须等待另一个线程退出,才能进入,说明了写写互斥

感谢阅读,希望对你有所帮助 :) 

来源:cnblogs.com/liuqing576598117/p/11168528.html

推荐:

主流Java进阶技术(学习资料分享)

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

阿里技术面:ReadWriteLock读写之间互斥吗?相关推荐

  1. 阿里技术面试题汇总,“跳槽”就靠它了(文中附答案)

    以下为整理的2019阿里技术面试题及部分答案,详细答案可在文末获取! · 如何实现一个高效的单向链表逆序输出? 部分参考答案 typedefstructnode{intdata;structnode* ...

  2. 阿里云RDS 读写分离

    阿里云RDS 读写分离 前置条件 读写分离配置位置 读写分离 只读 前置条件 需要一个RDS主数据库实例,以及最少一个只读数据库实例 读写分离配置位置 在主实例找到数据库代理 新增代理终端(类似代理服 ...

  3. 读懂这篇文章,你的阿里技术面就可以过关了 | Apache RocketMQ 101

    在美国的大学课程中,101是所有课程中的第一门,是新生入学后的必修课程.阿里巴巴中间件技术专家刘振东在上周的Apache RocketMQ开发者沙龙北京站的活动上,进行了主题为<ApacheRo ...

  4. 2019年6月 阿里技术面试题集锦(28道含答案)

    戳蓝字"CSDN云计算"关注我们哦! 想要入职大厂可谓是千军万马过独木桥.要通过层层考验,刷题肯定是必不可少的. 为帮助开发者们提升面试技能.有机会入职阿里,云栖社区特别制作了这个 ...

  5. 腾讯跟阿里两位王者之间的对比

    前言   程序员朋友圈有一篇比较火的文章<当下(2018 年)腾讯的技术建设是否处于落后同体量公司的状态?>,虽然网上不乏介绍腾讯与阿里不同之处(包括文化.薪资待遇.公司氛围和技术建设等方 ...

  6. linux进程互斥要点,linux进程之间互斥

    总所周知,在linux中pthread_mutex_t可以用于同一进程内多个线程之间的同步.我们所需要做的工作,仅仅是定义一个全局的pthread_mutex_t类型变量即可.但是对于进程之间的互斥, ...

  7. 阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统

    秒杀活动是绝大部分电商选择的低价促销,推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而提升秒 ...

  8. ReadWriteLock读写文件

    概述 ReadWriteLock是一个接口,在它里面只定义了两个方法:一个读的锁和一个写的锁. 读的锁:A线程获取了读的锁,那么B线程也可以获取读的锁. 写的锁:A线程获取了写的锁,那么B线程不能获取 ...

  9. 阿里技术面全A,终面却被产品经理拉下马。。

    大纲: 一.投递简历 二.准备面试 三.技术一面 四.健身房里的技术二面 五.产品经理的死亡三面 六.总结 一.投递简历 找内推.大公司投简历尽量找内推,无论是校招还是社招.校招可以去牛客网或知乎找, ...

最新文章

  1. 使用Windows操作系统的13个窍门
  2. 超越Android:Kotlin在后端的工作方式
  3. matlab神经模糊推理系统
  4. 分布式系统之通信技术学习
  5. JDK环境变量设置(linux)
  6. centos7 安装 node.js 运行环境、卸载
  7. 混合云模式下 MaxCompute + Hadoop 混搭大数据架构实践
  8. 链表常见算法题总结(Java)
  9. H.264 sequence parameter sets成员值含义学习笔记
  10. 使用BoobSnail生成任意Excel 4.0 XLM宏文件
  11. msvcrtd.lib(crtexew.obj):error LNK2019:无法解析的外部符号WinMain@16,该符号在函数___tmainCRTStartup中被引用
  12. solidworks2016详细安装教程
  13. SQL 比较时间大小
  14. 华为静态路由配置案例
  15. vba字典重复key_利用VBA字典,提取两列数据的重复值
  16. java程序员平均工资多少,详细说明
  17. 【C#公共帮助类】枚举独特类
  18. 万能遥控器小制作(四)
  19. anaconda快捷键
  20. ctfshow sql注入 web171-web253 wp

热门文章

  1. 专访余承东:华为引领行业进步 折叠屏手机即将上市
  2. 抱团成功!OPPO、vivo、小米携手成立“互传联盟”
  3. 小红书发布声明:已对站内内容启动全面排查、整改
  4. 新浪微博:已经吃下去的,又全都吐出来了!
  5. 现在的手机电池为什么不可拆卸?真相太真实了...
  6. 真相来了!魅族再回应手机不能拨打120一事:系统升级问题
  7. 相机翻转设计的华硕旗舰ZenFone 6固件更新:新增“超级夜间模式”
  8. 2岁男童入住自如后患白血病离世 自如回复:道歉做不到
  9. 身份的象征?苹果信用卡实体首度曝光:简约大方 保护隐私
  10. 人从众!五一假期全国旅游收入破千亿 你贡献了多少?