java ReadWriteLock接口

在 Java 中,ReadWriteLock 接口的实现类ReentrantReadWriteLock 类提供了一种允许多个线程同时读取某一资源但只允许一个线程写的锁定机制。这种机制可以提高并发性能,特别是在读操作远多于写操作的场景下。
在这里插入图片描述

特性:

  • 可重入;
  • 不存在两个线程同时持有写锁,或一个持有读锁一个持有写锁;
  • 只存在写锁独占,或都是持有读锁;
  • 写锁也叫排它锁,读锁也叫共享锁;
  • 支持锁降级,锁降级(Lock Downgrading)是指在持有写锁的情况下,可以获取读锁,然后释放写锁,以便在读取共享资源时仍保持一定的同步。

锁降级例子:

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteLockExample {private int value = 0;private final ReadWriteLock lock = new ReentrantReadWriteLock();public void writeAndRead() {lock.writeLock().lock();  // 获取写锁try {value++;System.out.println("Written value: " + value);lock.readLock().lock();  // 获取读锁} finally {lock.writeLock().unlock();  // 释放写锁, 之后其他线程就可以获取读锁了}try {Thread.sleep(10000);System.out.println("Read value after write: " + value);} catch (InterruptedException e) {throw new RuntimeException(e);} finally {lock.readLock().unlock();  // 释放读锁}}public int read() {lock.readLock().lock();  // 获取读锁try {System.out.println("Read value: " + value);return value;} finally {lock.readLock().unlock();  // 释放读锁}}public static void main(String[] args) throws InterruptedException {ReadWriteLockExample example = new ReadWriteLockExample();// Writer threadThread writerThread = new Thread(() -> {example.writeAndRead();});// Reader threadThread readerThread = new Thread(() -> {example.read();});writerThread.start();Thread.sleep(2000);readerThread.start();}
}

输出:
在这里插入图片描述

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

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

相关文章

前端使用Threejs加载机械臂并控制机械臂跳舞

1. 前言 在我的第一篇博客中,大致讲解了如何使用threejs导入机械臂模型,以及如何让机械臂模型动起来的案例,可以看一下之前的博客前端使用Threejs控制机械臂模型运动 本篇博客主要讲解的是在原来的基础上添加GSAP动画库的应用,可以通过动画,来让机械臂进行指定轨迹位姿的运动…

基于SpringBoot的休闲娱乐代理售票系统

本系统主要包括管理员和用户两个角色组成;主要包括:首页、个人中心、用户管理、折扣票管理、分类管理、订单信息管理、退票信息管理、出票信息管理、系统管理等功能的管理系统。 💕💕作者:Weirdo 💕&#x…

Python酷库之旅-第三方库Pandas(009)

目录 一、用法精讲 19、pandas.read_xml函数 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 19-6-1、数据准备 19-6-2、代码示例 19-6-3、结果输出 20、pandas.DataFrame.to_xml函数 20-1、语法 20-2、参数 20-3、功能 20-4、返回值 …

GTP/GTX 手动对齐,谈谈思路。

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

【server】springboot 整合 redis

1、redis 使用模式 1.1 单机模式 1.1.1 编译安装方式 1.1.1.1 下载 Redis的安装非常简单,到Redis的官网(Downloads - Redis),下载对应的版本,简单几个命令安装即可。 1.1.1.2 编译安装 tar xzf redis-stable.tar.…

GPU发展史(二):改变游戏规则的3Dfx Voodoo

小伙伴们,大家好呀,我是老猫。 在上一篇GPU发展史(一)文章中,我们介绍了1976-1995期间早期显卡的发展故事,今天我们将介绍在1995-1999年这段时间显卡的故事,而这段故事的主角就是——3Dfx 提起…

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式(Prompt-tuning,Prefix-tuning,P-tuning) ,主要是围绕NLP上的成果,具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置介绍】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进…

RabbitMQ(集群相关部署)

RabbitMQ 集群部署 环境准备:阿里云centos8 服务器,3台服务器,分别进行安装; 下载Erlang Erlang和RabbitMQ版本对照:https://www.rabbitmq.com/which-erlang.html 创建yum库配置文件 vim /etc/yum.repos.d/rabbi…

生物墨水:3D组织生物打印的基石

生物墨水是3D组织生物打印技术的核心组成部分。生物墨水通常由生物材料(如水凝胶聚合物)与所需的细胞和/或其他生物大分子(例如生长因子)混合而成。为了成功地进行组织生物打印,生物墨水必须满足以下要求: …

为什么要设计DTO类

为什么要使用DTO类,下面以新增员工接口为例来介绍。 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求分析时,往往都是对照着产品原型进行分析,因为产品原型比较直观,便于我们理解业务。 后台系统中可以管理员工信息…

Bug记录:【com.fasterxml.jackson.databind.exc.InvalidDefinitionException】

bug记录 序列化错误 异常com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 完整错误(主要是FAIL_ON_EMPTY_BEANS) 00:15:20.250 [http-nio-3000-exec-1] ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - S…

数据驱动的内容优化:Kompas.ai如何提升内容表现

在数字化营销时代,内容是企业与用户沟通的重要桥梁。然而,随着信息量的爆炸性增长,如何让内容在激烈的竞争中脱颖而出,成为每个营销人员面临的问题。数据驱动的内容优化策略,通过精准分析和科学决策,帮助品…

线程安全(一)Java锁(锁分类、锁升级、锁优化)

目录 一、乐观锁二、悲观锁三、自旋锁3.1 自旋锁的优缺点:3.2 自旋锁的时间阈值:3.3 自旋锁的开启:四、Synchronized 同步锁4.1 Synchronized 作用范围:4.2 Synchronized 核心组件:4.3 Synchronized 实现:4.4 Synchronize 补充:五、ReentractLock 锁5.1 Lock 接口的主要…

业务发展中 10 个最佳的 OKR 示例

业务发展是推动组织增长、培养合作伙伴关系和扩大市场覆盖范围的重要职能。目标和关键结果 (OKR) 可以作为推动业务发展工作和实现战略目标的强大工具。在这里,我们展示了业务发展中的十个最佳 OKR 示例,为旨在在该领域脱颖而出并实现其增长目标的组织提…

产品体验周刊第2期(2024-7-8)

产品体验 阿里系产品的营销活动 无论是支付宝,饿了么,咸鱼等,产品的营销活动频次过高,且几乎任何一个活动页都让人无法理解想要表达什么,只有满屏的红包、优惠等字眼,开始对这类活动脱敏也是基于这些产品…

【漏洞复现】方正全媒体采编系统——SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 方正全媒体采编系统(FZMediaEditor)是一…

在pycharm中使用jupyter

在pycharm中使用jupyter 前置条件:你的环境中应该有juptyer ,没有的话 pip install jupyter 点击项目目录,右键->new->jupyter notebook 打开file settings 找到 jupyter server (按照默认的用代理服务器就行) P…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板,适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

python- Flask模块 demo

文章目录 前言python- Flask模块 demo1. 主要特点2. demo 准备工作3. demo 实例4. 测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c…