系列十、ReentrantReadWriteLock

一、概述

ReentrantReadWriteLock是ReadWriteLock的一个子类,具有读锁和写锁的双重功能,通常用于做缓存。

二、案例代码

2.1、ReentrantReadWriteLockCache

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/20 17:57* @Description: 使用ReentrantReadWriteLock实现缓存的功能*/
public class ReentrantReadWriteLockCache {private volatile Map<String, Object> map = new HashMap<>();private ReadWriteLock rwLock = new ReentrantReadWriteLock();/*** 写数据* @param key* @param value*/public void put(String key, Object value) {rwLock.writeLock().lock();try {System.out.println(Thread.currentThread().getName() + "\t正在写" + key);// 线程休眠,单位:毫秒try {TimeUnit.MILLISECONDS.sleep(300);} catch (Exception e) {e.printStackTrace();}map.put(key, value);System.out.println(Thread.currentThread().getName() + "\t写完了" + key);System.out.println();} catch (Exception e) {e.printStackTrace();} finally {rwLock.writeLock().unlock();}}/*** 读数据* @param key* @return*/public Object get(String key) {rwLock.readLock().lock();Object result = null;try {System.out.println(Thread.currentThread().getName() + "\t正在读" + key);// 线程休眠,单位:毫秒try {TimeUnit.MILLISECONDS.sleep(300);} catch (Exception e) {e.printStackTrace();}result = map.get(key);System.out.println(Thread.currentThread().getName() + "\t读完了" + result);} catch (Exception e) {e.printStackTrace();} finally {rwLock.readLock().unlock();}return result;}
}

2.2、ReentrantReadWriteLockMainApp

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/20 18:00* @Description:*/
public class ReentrantReadWriteLockMainApp {public static void main(String[] args) {ReentrantReadWriteLockCache cache = new ReentrantReadWriteLockCache();for (int i = 1; i <= 5; i++) {final int number = i;new Thread(() -> {try {cache.put(String.valueOf(number),number);} catch (Exception e) {e.printStackTrace();}}, String.valueOf(i)).start();}for (int i = 1; i <= 5; i++) {final int number = i;new Thread(() -> {try {cache.get(String.valueOf(number));} catch (Exception e) {e.printStackTrace();}}, String.valueOf(i)).start();}}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go的字符切片和字符串互转

Go 1.21 // 返回一个Slice&#xff0c;它的底层数组自ptr开始&#xff0c;长度和容量都是len func Slice(ptr *ArbitraryType, len IntegerType) []ArbitraryType // 返回一个指针&#xff0c;指向底层的数组 func SliceData(slice []ArbitraryType) *ArbitraryType // 生成一…

学习笔记5——对象、直接内存、执行引擎,string

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://baobeihuijia.com/bbhj/contents/3/192486.html 创建对象的步骤 对象对应的类是否被加载&#xff0c;链接&#xff08;链接到真实的内存地址&#xff09;&#xff0c;初始化&#xff08;类初始化&#xff09;…

P2444 [POI2000] 病毒

[P2444 POI2000] 病毒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 问题等价于在字典图中找一个环&#xff0c;这个环要满足环上节点不是所有所给字符串最后一个字符结尾的点。 找环算法&#xff1a; void dfs(int u) {in[u] 1; // u在当前dfs路径中for(auto y: g[u]) {…

机器学习笔记 - FlowNet:使用卷积网络学习光流

一、概述 卷积神经网络(CNN)对各种计算机视觉任务做出了巨大贡献。最近,CNN 已成功用于估计光流。与传统方法相比,这些方法在质量上取得了很大的提高。在此,我们将对以下论文进行简要回顾。 FlowNet1.0和FlowNet2.0都是端到端架构。FlowNet2.0是FlowNetCorr和FlowNetS的堆…

Linux常见命令手册

目录 文件命令 文件和目录命令 文件的权限命令 文件搜索命令 进程命令 查看进程命令 关闭进程命令 用户和群组命令 网络命令 firewall-cmd 网络应用命令 高级网络命令 网络测试命令 网络安全命令 网络配置命令 软件管理命令 系统信息命令 vi编辑器 关机命令…

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址&#xff1a;NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本&#xff0c;则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件&#xff08;例如 android-ndk-r25c-…

webpack 中,filename 和 chunkFilename 的区别

filename filename 是一个很常见的配置&#xff0c;就是对应于 entry 里面的输入文件&#xff0c;经过webpack打包后输出文件的文件名。比如说经过下面的配置&#xff0c;生成出来的文件名为 index.min.js。 chunkFilename chunkFilename 指未被列在 entry 中&#xff0c;却…

C语言求解猴子吃桃问题

这是一道经典的数学问题&#xff0c;可以使用递归或循环两种方法来解决。 递归方法&#xff1a; 假设第10天猴子有x个桃子吃&#xff0c;那么第9天猴子一定有(x 1) * 2个桃子&#xff0c;以此类推&#xff0c;可以得到第1天猴子要有多少个桃子才能保证最后剩下1个。 代码如…

使用 Splashtop 的开放 API 简化 IT 工作流程

我们的工作方式在不断变化&#xff0c;IT 技术人员必须迅速适应时代的变化。越来越多的公司正在转向混合和远程策略&#xff0c;这为那些在服务台或IT技术人员工作的人增加了额外的工作层。对于系统管理员来说&#xff0c;管理一切都可能变得更加复杂。 找到合适的软件来管理多…

Stable Diffusion - StableDiffusion WebUI 软件升级与扩展兼容

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134463035 目前&#xff0c;StableDiffusion WebUI 的版本是 1.6.0&#xff0c;同步更新 controlnet、tagcomplete、roop、easy-prompt-selector等…

JDY蓝牙注意事项

波特率设置&#xff1a;9600&#xff0c;不接受115200&#xff0c;或者38400. 不同于WiFi测试&#xff0c;jdy蓝牙不接受AT"指令&#xff0c;可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用&#xff0c;不知道是不是生产的公司不一样

9 Redis的发布和订阅

127.0.0.1:6379> publish topic1 jack (integer) 0 #表示此时没有被订阅&#xff0c;消息丢了发布订阅&#xff1a;发送即忘的原则&#xff0c;发了就不管了&#xff0c;没有人订阅&#xff0c;就丢了。 127.0.0.1:6379> subscribe topic1 Reading message ... #表示开…

产业区块链生态日:你的故事,我们在等待 | 征集帖

Hello&#xff0c;FISCO BCOS的朋友们&#xff0c;FISCO BCOS开源社区一年一度的盛会即将在12月份与大家见面啦&#xff01;今年的盛会将进一步升级&#xff0c;以产业区块链生态日的形式&#xff0c;与业界共同探索区块链产业的发展现状与未来。 在生态日上&#xff0c;社区意…

【LeetCode】每日一题 2023_11_20 最大子数组和(dp)

文章目录 刷题前唠嗑题目&#xff1a;最大子数组和题目描述代码与解题思路 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 今天是一道 LeetCode 的经典题目&#xff0c;如果是 LeetCode 老手&#xff0c;估计都刷过&#xff0c;话是这么说&#xff0c;但咱…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口&#xff0c;可供开发过程中调用和测试使用 django会搜集所有已注册的模型类&#xff0c;为这些模型类提供数据管理界面&#xff0c;供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

简单回顾矩阵的相乘(点乘)230101

[[1 0 1][1 1 0]] [[3 0 0 3][2 2 1 3][1 3 1 1]] [[4. 3. 1. 4.][5. 2. 1. 6.]]乘以 c11 a11*b11 a12*b21 a13*b31 1*3 0*2 1*1 4 c12 a11*b12 a12*b22 a13*b32 1*0 0*2 1*3 3 c13a11*b13 a12*b23a13*b33 c14a11*b14 a12*b24a13*b34 c21a21*b11 a22*b21 a23*b…

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar

tabBar是用QT插件实现的一个dll&#xff0c;对于插件的使用可以参考文章&#xff1a; 《QT从基础到进阶三十三》QT插件开发QtPlugin 源码放在文章末尾 该功能类似侧边工具栏&#xff0c;可以在该标签栏上添加自己开发的界面&#xff0c;实现代码如下&#xff1a; 1、所有功能…

Tomcat无法映射到activiti-app导致activiti无法启动页面

原因之一&#xff1a;JDK版本与Tomcat版本不匹配&#xff0c;jdk8 yyds 我使用的是JDK11&#xff0c;Tomcat是9.0的&#xff0c;都是最新的&#xff0c;但还是不行&#xff0c;最后JDK改为8&#xff0c;tomcat的cmd后台没有报错&#xff0c;activiti-pp也可以正常访问了,很神奇…

Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢&#xff1f; 1.2 什么是输入设备的应用编程&#xff1f; 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件&#xff1a; 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

ATFX汇市:欧元区10月CPI年率终值不变,EURUSD逼近1.1000心理关口

ATFX汇市&#xff1a;据欧盟统计局11月17日发布的数据&#xff0c;欧元区10月名义CPI年率终值2.9%&#xff0c;与10月末公布的初值持平。欧央行对通胀率的长期调控目标为2%左右&#xff0c;10月份名义CPI年率已经非常接近目标范围&#xff0c;欧央行继续加息的紧迫性降低。10月…