并发编程工具集——Lock和Condition(上)(十二)

简述:Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问题,Condition 用于解决同步问题。

再造管程的理由和期望

  1. 理由:synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchronized 申请资源的时候,如果申请不到,线程直接进入阻塞状态了,无法释放线程占有的资源。
  2. 期望:对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。

重新设计一把互斥锁去解决这个问题(三个功能)

  1. 能够响应中断
    • 如果阻塞状态的线程能够响应中断信号,能够唤醒它,那它就有机会释放曾经持有的锁 A。这样就破坏了不可抢占条件了。
  2. 支持超时
    • 如果线程在一段时间之内没有获取到锁,不是进入阻塞状态,而是返回一个错误,那这个线程也有机会释放曾经持有的锁。这样也能破坏不可抢占条件。
  3. 非阻塞的获取锁
    • 如果尝试获取锁失败,并不进入阻塞状态,而是直接返回,那这个线程也有机会释放曾经持有的锁。这样也能破坏不可抢占条件。

如何保证可见性

  1. Java SDK 里面 Lock 的使用,有一个经典的范例,就是try{}finally{},需要重点关注的是在 finally 里面释放锁。
  2. 它是利用了 volatile 相关的 Happens-Before 规则。Java SDK 里面的 ReentrantLock,内部持有一个 volatile 的成员变量 state,获取锁的时候,会读写 state 的值;解锁的时候,也会读写 state 的值(简化后的代码如下面所示)。也就是说,在执行 value+=1 之前,程序先读写了一次 volatile 变量 state,在执行 value+=1 之后,又读写了一次 volatile 变量 state。根据相关的 Happens-Before 规则:
    • 顺序性规则:对于线程 T1,value+=1 Happens-Before 释放锁的操作 unlock();
    • volatile 变量规则:由于 state = 1 会先读取 state,所以线程 T1 的 unlock() 操作 Happens-Before 线程 T2 的 lock() 操作;
    • 传递性规则:线程 T1 的 value+=1  Happens-Before 线程 T2 的 lock() 操作。

 后续线程T2能够看到value的正确规则

 

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

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

相关文章

Linux kernel 与 设备树

Linux kernel 与 设备树 1 介绍1.1 概述1.2 发展历程1.3 各版本发布时间及特色1.4 Linux 单内核1.5 Linux 内核网址1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别 2 Linux 内核组成2.1 进程管理2.2 内存管理2.3 文件系统2.4 设备管理2.5 网络功能 3 Linux 内核编译3.1 编译 Kernel…

小程序发布必须进行软件测试吗?测试内容有哪些?

在如今移动互联网时代,小程序已成为许多企业广泛采用的一种营销手段,然而,发布小程序之前进行充分的软件测试是至关重要的,因为它不仅可以确保小程序的质量,还可以避免潜在的风险和损失。 在进行小程序发布前进行软件…

可逆质子陶瓷电化学电池(R-PCEC)作为新型能量存储与转换装置开发应用价值大

可逆质子陶瓷电化学电池(R-PCEC)作为新型能量存储与转换装置开发应用价值大 可逆质子陶瓷电化学电池(R-PCEC),同时具有燃料电池与电解槽功能,能够实现电能、化学能相互转化,是最具有发展前景的能…

「51媒体」政企活动媒体宣发如何做?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 政企活动媒体宣发是一个系统性的过程,需要明确…

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展,冷库成为储存食材、保证食品质量的重要场所。 然而,由于冷库环境的特殊性,如密封性强、温度低、湿度大等,一旦冷库内发生可燃气体泄露,后果将不堪设想。因此,在餐饮冷库中安装并合理…

SpringBoot集成道历(实现道历日期查询)

官网地址&#xff1a;官网地址https://6tail.cn/calendar/api.html 1、导入依赖 <dependency><groupId>cn.6tail</groupId><artifactId>lunar</artifactId><version>1.3.9</version></dependency><dependency><group…

MQTT遗嘱信息(2)

接前一篇文章&#xff1a;MQTT遗嘱信息&#xff08;1&#xff09; 本文内容参考&#xff1a; 什么是MQTT遗嘱消息&#xff1f;如何配置和处理遗嘱消息&#xff1f;_mqtt last will-CSDN博客 MQTT 协议学习&#xff1a;Retained&#xff08;保留消息&#xff09; 与 LWT&#x…

shark云原生-日志管理体系-filebeat

文章目录 1. deploy 文件1.1 RBAC1.2. DaemonSet1.2.1. Elasticsearch 连接信息1.2.2. Volume 1.3. ConfigMap1.3.1. 日志收集路径1.3.2. 日志事件输出目标 2. 在控制平面节点上运行Filebeat3. 查看输出3.1. 关于处理器 processors 4. 日志收集配置4.1. 手动指定日志收集路径4.…

基于SpringBoot前后端分离旅游出行管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

聚观早报 | iPhone 16核心硬件曝光;三星Galaxy全球新品发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月28日消息 iPhone 16核心硬件曝光 三星Galaxy全球新品发布会 苹果正多方下注布局AI商店 黄仁勋2024年薪酬3400…

Zynq7000系列FPGA中的DMA控制器简介(一)

DMA控制器&#xff08;DMAC&#xff09;使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输&#xff0c;操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上&#xff0c;该指令集提供了一种灵活的指定DMA传输的方法。这种方…

【电路笔记】-MOSFET放大器

MOSFET放大器 文章目录 MOSFET放大器1、概述2、电路图3、电气特性3.1 ** I D = F ( V G S ) I_D=F(V_{GS}) ID​=F(VGS​)**特性3.2 I D = F ( V D S ) I_D=F(V_{DS}) ID​=F(VDS​)特性4、MOSFET放大器5、输入和输出电压6、电压增益7、总结1、概述 在前面的文章中,我们已经…

基本的 Spring Boot 配置步骤和常见的配置项【创建,配置,日志,数据库,安全,MVC】

基本的 Spring Boot 配置步骤和常见的配置项【创建&#xff0c;配置&#xff0c;日志&#xff0c;数据库&#xff0c;安全&#xff0c;MVC】 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、…

EAK高压电阻器-引线高压电阻器-厚膜高压电阻器

描述 EAK高压电阻器是扁平高压电阻器&#xff0c;完全满足低感、稳定和精密无源元件的所有要求。 扁平高压电阻器最适合作为组装在 PCB 上的有线元件&#xff0c;但也可以用作 SMD 元件。 我们提供 HVR、HPR、HVI、HVD 和 HVS 系列的扁平高压电阻器&#xff0c;这些电阻器具…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日&#xff0c; 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办&#xff0c;赛宁网安、永信至诚、红客社区协办&#xff0c;致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展&#xff0c;推动安全行业共建共享…

Cambrian-1:探索以视觉为中心的多模态LLM新纪元

一、摘要 论文&#xff1a;Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs&#xff0c;https://arxiv.org/abs/2406.16860 主页&#xff1a;https://cambrian-mllm.github.io/ 代码&#xff1a;https://github.com/cambrian-mllm/cambrian 本文研发…

堆栈与堆内存 - C#

探索 C# 编程中内存管理的细微差别&#xff0c;区分值类型和引用类型&#xff0c;理解动态和静态内存分配&#xff0c;评估访问效率… 背景 以下是 C# 中堆栈和堆内存之间的主要区别列表。这适用于初学者和专业的 C# 开发人员。 C# 中栈和堆内存的区别 概括 现在&#xff0c…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口&#xff0c;电商企业可以实现商品同步功能&#xff1a; 商品信息同步&#xff1a;通过接口可以实时同步主流电商平台上的商品信息&#xff0c;包括商品标题、价格、库存、销量等数据&#xff0c;确保企业在自…

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习&#xff0c;我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱&#xff0c;下…

哈喽GPT-4o,对GPT-4o 数据分析Data Analysis的思考与看法

目录 上传一个Excel给Data Analysis。Prompt&#xff1a;请问这个数据集是做什么的Prompt&#xff1a;请问书籍的定价如何&#xff0c;请用合适的图表展示它的售价情况Prompt&#xff1a;请统计书名列中出现最多的名称&#xff0c;然后使用词云将其可视化。Prompt&#xff1a;请…