【转】-java多线程读写锁ReadWriteLock

Java多线程中读写锁ReadWriteLock的使用

该博客转载自​**lavimerJava多线程中读写锁ReadWriteLock的使用**

1. 概念

读写锁分为读锁和写锁,多个读锁之间是不需要互斥的(读操作不会改变数据,如果上了锁,反而会影响效率),写锁和写锁之间需要互斥,也就是说,如果只是读数据,就可以多个线程同时读,但是如果你要写数据,就必须互斥,使得同一时刻只有一个线程在操作。

2. 案例

2.1 三线程读数据,三线程写数据
package com.tao.leanrn.thread.lock;import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** @ClassName ReadWrite* @Descriiption 读写锁* @Author yanjiantao* @Date 2019/8/21 10:42**/
public class ReadWrite {/*** 共享数据*/private int data = 0;/*** 读写锁*/private ReadWriteLock lock = new ReentrantReadWriteLock();public void get() {// 上读锁lock.readLock().lock();try {System.out.println(Thread.currentThread().getName() + "----->读锁开始执行...");Thread.sleep((long)(Math.random() * 10));System.out.println(Thread.currentThread().getName() + "----->读锁得到数据data=" + data);} catch (InterruptedException e) {e.printStackTrace();} finally {// 释放锁lock.readLock().unlock();}}public void set() {// 上写锁lock.writeLock().lock();try {System.out.println(Thread.currentThread().getName() + "----->写锁开始执行...");Thread.sleep((long)(Math.random() * 10));data++;System.out.println(Thread.currentThread().getName() + "----->写锁得到数据data=" + data);} catch (InterruptedException e) {e.printStackTrace();} finally {// 释放写锁lock.writeLock().unlock();}}
}/*** 测试类*/
class Main{public static void main(String[] args) {ReadWrite readWrite = new ReadWrite();// 创建100个读写线程for (int i = 0; i < 100; i++) {new Thread(() -> {readWrite.get();}).start();new Thread(() -> {readWrite.set();}).start();}}}

程序运行结果

1706261828185.png

2.2 模拟Hibernate缓存
public class HibernateCache {/* 定义一个Map来模拟缓存 */private Map<String, Object> cache = new HashMap<String, Object>();/* 创建一个读写锁 */private ReadWriteLock rwLock = new ReentrantReadWriteLock();/*** 模拟Hibernate缓存* @param key* @return*/private Object getData(String key) {/* 上读锁 */rwLock.readLock().lock();/* 定义从缓存中读取的对象 */Object value = null;try {/* 从缓存中读取数据 */value = cache.get(key);if (value == null) {/* 如果缓存中没有数据,我们就把读锁关闭,直接上写锁【让一个线程去数据库中取数据】 */rwLock.readLock().unlock();/* 上写锁 */rwLock.writeLock().lock();try {/* 上了写锁之后再判断一次【我们只让一个线程去数据库中取值即可,当第二个线程过来的时候,发现value不为空了就去缓存中取值】 */if (value == null) {/* 模拟去数据库中取值 */value = "hello";}} finally {/* 写完之后把写锁关闭 */rwLock.writeLock().unlock();}/* 缓存中已经有了数据,我们再把已经 关闭的读锁打开 */rwLock.readLock().lock();}} finally {/* 最后把读锁也关闭 */rwLock.readLock().unlock();}return value;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225483.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

java框架-MyBatis

文章目录 1. Mybatis介绍2. Mybatis架构3. Mybatis入门程序4. Mapper动态代理开发持久层方法5. SqlMapConfig.xml配置文件6. Mapper.xml7. Mybatis整合spring8. Mybatis逆向工程&#xff08;了解&#xff09;9. 分页插件PageHelper总结 1. Mybatis介绍 MyBatis是优秀的持久层框…

一文清晰了解CSS——简单实例

首先一个小技巧&#xff1a; 一定要学会的vsCode格式化整理代码的快捷键&#xff0c;再也不用手动调格式了-腾讯云开发者社区-腾讯云 (tencent.com) CSS选择器用于选择要应用样式的HTML元素。常见的选择器包括&#xff1a; 类选择器&#xff1a;以.开头&#xff0c;用于选择具…

燃烧你的厨艺,“灶”亮你的厨房——华火电燃灶

在厨房的舞台上&#xff0c;一台出色的灶具就如同一位默契的伙伴&#xff0c;能助您烹制出美味佳肴&#xff0c;展现烹饪的魅力。今天&#xff0c;我们要为您隆重介绍一款能颠覆您厨房体验的创新产品——华火电燃灶&#xff0c;它将以其独特的优势&#xff0c;为您的厨房带来全…

【深度学习】手动完成线性回归!

&#x1f34a;嗨&#xff0c;大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; )&#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙&#xff1a;一个帮助编程小…

Nacos 配置管理模型 -- 命名空间(Namespace)、配置分组(Group)和配置集ID(Data ID)

前言&#xff1a; 我们都知道 Nacos 既可以做注册中心&#xff0c;也可以做配置中心&#xff0c;本篇我们简单分享一下 Nacos 配置中心的几个重要概念&#xff0c;以及他们之间的关系&#xff0c;来帮助我们更深入的理解运用 Nacos 配置中心。 Nacos 系列文章传送门&#xff…

案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/140313789 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片…

AI绘画Midjourney从入门到实战应用

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

项目实战--Spring Boot + GraphQL实现实时数据推送

背景 用户体验不断提升而3对实时数据的需求日益增长&#xff0c;传统的数据获取方式无法满足实时数据的即时性和个性化需求。 GraphQL作为新兴的API查询语言&#xff0c;提供更加灵活、高效的数据获取方案。结合Spring Boot作为后端框架&#xff0c;利用GraphQL实现实时数据推…

中职大数据实训室

一、中职大数据实训室建设背景 《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》中强调了数字化转型的重要性&#xff0c;明确提出了建设数字中国的战略目标。大数据技术作为数字化转型的核心&#xff0c;对于培养具备大数据分析、处理和应用能力的…

简单仿写SpringIOC

gitee地址&#xff08;需要自取&#xff09;ioc_Imitation: 简单仿写IOC (gitee.com) 项目目录结构 Autowired Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface Autowired { }Component Target(ElementType.TYPE) Retention(RetentionPoli…

如何更改WordPress网站的字体(适用于所有主题)

如何更改WordPress的字体的具体方法&#xff0c;需要取决于您使用的是新的区块主题还是比较旧的经典主题&#xff0c;这一点可能会让人感到困惑&#xff0c;本文中我们将详细介绍二者的区别以及如何分别在这两种主题中修改字体的的方法。 区别&#xff1a; 现代区块主题具有内…

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率&#xff1a;探索APILayer提供的开源资源 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;是实现应用间通信和功能扩展的关键工具。公共API&#xff08;Public APIs&#xff09;则为开发者提供了宝贵的资源&#…

Windows Server 2012 R2查看IIS版本

文章目录 一、方法一1.win R 键打开运行窗口 → 输入 "regedit" → 点击【确定】2.HKEY_LOCAL_MACHINE → SOFTWARE → Microsoft → InetStp 二、方法二1.win R 键打开运行窗口 → 输入 "inetmgr" → 点击【确定】2.点击 【帮助】 → 选择【关于 Intern…

springboot社区物资交易互助平台+lw+源码+调试+讲解

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但…

computed传参

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 computed可以依据其他变量动态计算出值&#xff0c;但是v-for渲染html时&#xff0c;需要根据html中 传入的不同变量&#xff0c;来分别做处理或者利用 html中的值该…

在繁华与奇迹交织的深圳

在繁华与奇迹交织的深圳&#xff0c;有一本奇书悄然走红&#xff0c;它便是《华强北经济学》&#xff0c;由那位深谙市场脉搏、笔触带风的宋仕强先生所著。这本书&#xff0c;仿佛是华强北这片创业热土的缩影&#xff0c;用一个个生动鲜活的故事&#xff0c;诠释了什么是“从螺…

逻辑运算及其基本概念,定理,算法,规律,卡诺图

逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图 文章目录 逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图开胃小菜运算1、与运算2、或运算3、非运算4、与非&#xff08;都1时为0&#xf…

数据融合工具(5)面中心线提取

这是一个重磅工具&#xff0c;建议先看视频。 提取中心线 一、需求背景 说真的&#xff0c;当小编第一次使用ArcGIS中的Polygon To Centerline工具提取面要素中心线时&#xff0c;激动得无以言表&#xff0c;毕竟&#xff0c;以前要提取面中心线&#xff0c;是一件非常麻烦的事…

详细分析Spring中的@Configuration注解基本知识(附Demo)

目录 前言1. 基本知识2. 详细分析3. Demo3.1 简单Bean配置3.2 属性配置3.3 多条件配置 4. 实战拓展 前言 Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Spring框架从入门到学精&#xff08;全&am…