Java中ReentrantLock测试线程的安全

使用场景

当需要在多线程环境下保证共享资源的安全访问时,可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁,它提供了与synchronized关键字类似的功能,但更加灵活和扩展性强。

下面是一个使用ReentrantLock进行线程安全测试的示例代码:

import java.util.concurrent.locks.ReentrantLock;public class Singleton04 {private static int counter = 0;private static ReentrantLock lock = new ReentrantLock();public static void main(String[] args) {// 创建多个线程并启动for (int i = 0; i < 5; i++) {Thread thread = new Thread(new CounterRunnable());thread.start();}}static class CounterRunnable implements Runnable {@Overridepublic void run() {try {// 获取锁lock.lock();// 执行临界区操作for (int i = 0; i < 10000; i++) {counter++;}// 输出结果System.out.println("Thread " + Thread.currentThread().getId() + " finished. Counter: " + counter);} finally {// 释放锁lock.unlock();}}}
}

在上述代码中,我们创建了一个静态的ReentrantLock对象lock作为互斥锁,用于保护共享变量counter的访问。每个线程在执行临界区操作之前,先通过lock.lock()获取锁,然后执行操作,最后通过lock.unlock()释放锁。

运行该示例代码,可以看到多个线程并发地对counter进行自增操作,并输出每个线程结束后的结果。由于使用了ReentrantLock进行同步,保证了对counter的安全访问,不会出现数据错乱或冲突的情况。

需要注意的是,在使用ReentrantLock时,一定要在finally块中调用unlock()方法来确保锁的释放,以防止出现死锁的情况。

总而言之,通过使用ReentrantLock可以实现线程安全的访问共享资源,提供了更灵活和扩展性强的方式来控制多线程的同步。


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

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

相关文章

启动jar时指定nacos配置

背景 由于需要在不同服务上部署应用&#xff0c;避免频繁打包&#xff0c;需要在jar启动时灵活配置naocs配置 启动命令 java -Xms256m -Xmx512m -Dfile.encodingutf-8 -jar mes-gateway-1.0.1.jar --spring.cloud.nacos.discovery.server-addrhttp://127.0.0.1:8848 --spri…

Python 面向对象编程:类、对象、初始化和方法详解

Python 是一种面向对象的编程语言。在 Python 中&#xff0c;几乎所有东西都是对象&#xff0c;都具有其属性和方法。 类似于对象构造函数或用于创建对象的“蓝图”的类。 创建一个类 要创建一个类&#xff0c;请使用关键字 class&#xff1a; 示例&#xff0c;创建一个名为…

二进制部署k8s

常见的K8S安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;https://kubernetes.io/docs/setup/minikube ●Kubeadm Kubeadm也是一个工具&#xff0c;提供…

springcloud笔记 (8) -网关 Gateway

网关 出国需要过海关 网关&#xff1a;网络的关卡 网关的作用 1&#xff1a;路由转发 2&#xff1a;安全控制 保护每个服务&#xff0c;不需要将每个暴露出去 3&#xff1a;负载均衡 1.没有网关&#xff1a;客户端直接访问我们的微服务&#xff0c;会需要在客户端配置很多…

OpenCV官方教程中文版 —— 直方图均衡化

OpenCV官方教程中文版 —— 直方图均衡化 前言一、原理二、 OpenCV 中的直方图均衡化三、 CLAHE 有限对比适应性直方图均衡化 前言 本小节我们要学习直方图均衡化的概念&#xff0c;以及如何使用它来改善图片的对比。 一、原理 想象一下如果一副图像中的大多是像素点的像素值…

无人值守机房浸水监测数据采集网关

机房动环监控支持水浸远程开关门 机房动环监控系统是保障机房设备安全和稳定运行的关键设备。 水浸检测&#xff1a;系统配备水浸传感器&#xff0c;可以监测机房内的水浸情况&#xff0c;一旦发现水浸&#xff0c;即刻发出报警信号。 远程开关门&#xff1a;在接收到水浸报警…

c++编译使用log4cplus

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、log4cplus是什么&#xff1f;二、使用步骤1.下载源代码2.开始配置1.配置介绍2.开始编译 3.cmake引用4.示例 总结 前言 C很强大&#xff0c;但是仍然有很多…

SOFAStack软件供应链安全产品解析——SCA软件成分分析

近年来&#xff0c;软件供应链安全相关攻击事件呈快速增长态势&#xff0c;造成的危害也越来越严重&#xff0c;为了保障软件供应链安全&#xff0c;各行业主管单位也出台了诸多政策及技术标准。基于内部多年的实践&#xff0c;蚂蚁数科金融级云原生PaaS平台SOFAStack发布完整的…

GEE案例——一个完整的火灾监测案例dNBR差异化归一化烧毁指数

差异化归一化烧毁指数 dNBR是"差异化归一化烧毁指数"的缩写。它是一种用于评估卫星图像中烧毁区域严重程度的遥感指数。dNBR值通过将火灾前的归一化烧毁指数(NBR)减去火灾后的NBR来计算得出。该指数常用于野火监测和评估。 dNBR(差异化归一化烧毁指数)是一种用…

linux安装node(含npm命令) 并配置淘宝镜像源

1. 下载压缩包 wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz # node14 https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz # 推荐将压缩包放置到/usr/local/node文件夹中安装 mv node-v16.14.0-linux-x64.tar.xz /usr/local/node …

MySQL几种方法的数据库备份

MySQL几种方法的数据库备份_mysql备份的几种方式-CSDN博客 MySQL有几个方法来备份 最近博客一直想写点。可是不知道写什么&#xff0c;感觉自己近期的知识没有什么添加&#xff0c;今天想到了一篇能够写的博客。曾经试过依据data目录备份MySQL。可是从来没有成功过。前几天帮助…

maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories

前言 略 说明 新设备上安装了mvn 3.8.5&#xff0c;编译新项目出错&#xff1a; [ERROR] Non-resolvable parent POM for com.admin.project:1.0: Could not transfer artifact com.extend.parent:pom:1.6.9 from/to maven-default-http-blocker (http://0.0.0.0/): Bl…

【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)

Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT 写在最前面背景介绍自动程序修复流程Process of APR (automated program repair)1、漏洞程序2、漏洞定位模块3、补丁生成4、补丁验证 &#xff08;可以学习的PPT设计&#xff09;经典的…

k8s---深入解析pod

pod 1.为何使用pod?2.容器设计模式3. pod基本概念3.1 pod仍需关注的字段3.2 pod的生命周期 4.深入解析pod(四种Projected Volume&#xff0c;“投射数据卷)4.1 Secret4.2 ConfigMap4.3 Downward API4.4 ServiceAccountToken&#xff08;特殊secret&#xff09;4.5 pod 的健康检…

回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测

回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入…

SOLIDWORKS 2024新功能 3D CAD三维机械设计10大新功能

SOLIDWORKS 2024新增功能 - 3D CAD三维机械设计 10大新增功能 1. 先前版本的兼容性 •利用您订阅的 SOLIDWORKS&#xff0c;可将您的 SOLIDWORKS 设计作品保存为旧版本&#xff0c;与使用旧版本 SOLIDWORKS 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…

c++中 多线程执行时 线程的执行顺序不固定

C中多线程执行时&#xff0c;线程的执行顺序是不确定的。这是由于多线程的并发性质导致的。 在多线程程序中&#xff0c;多个线程可以同时执行&#xff0c;并且它们的执行顺序是由系统调度器决定的。系统调度器根据各种因素&#xff08;如线程的优先级、线程的状态等&#xff0…

ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收

题注&#xff1a;随着对ES接触的越来越深入&#xff0c;发现此前了解的ES知识点有点单薄&#xff0c;特此寻来ES知识点汇总成的一个思维导图&#xff0c;全面了解自己掌握了哪些&#xff0c;未掌握哪些。此外&#xff0c;作者斌并没有足够的精力学习ES全部的知识点&#xff0c;…

运行报错(三)git bash报错fatal: detected dubious ownership in repository at

报错现象 在运行git 命令时&#xff0c;出现报错 “fatal: detected dubious ownership in repository at” 报错原因 文件夹的所有者和现在的用户不一致 栗子&#xff1a; 文件夹的所有者是root&#xff0c;而当前用户是admin 解决方案 方法一、 将文件夹的所有者替换成ad…

网络原理之UDP协议

文章目录 前言应用层协议常见的几种数据格式1. xml2. JSON3. protobuffer 端口号传输层UDP 报文协议格式源端口号和目的端口号UDP 长度校验和 前言 前面我们学习了如何使用 UDP 数据报 和 TCP 流实现网络编程一个回显服务器&#xff0c;在知道了 UDP 和 TCP 协议的基本原理之后…