Synchronized对字符串上锁?

HTTP去请求就会像上面那种自动加个new String(),就会导致锁的线程不是同一个对象,可以通过获取对应常量达到效果

但还有个问题,字符串常量是存在JVM的常量池中。常量池是全局的。所以在其他地方有引用到相关常量时,就会造成一定的性能问题(如清华入学,锁的字符串常量一致时)

所以希望不同的接口功能使用不同的锁资源。就可以使用ConcurrentHashMap,在接口外设置交卷的ConcurrentHashMap对象,在接口中,看看是否有对应字符串,无

以下是一个利用ConcurrentHashMap对字符串上锁的示例:

 import java.util.concurrent.ConcurrentHashMap;​public class ConcurrentHashMapLockExample {​private static final ConcurrentHashMap<String, Object> locks = new ConcurrentHashMap<>();​public static void doSomethingUnderLock(String key) {// 获取锁对象Object lockObject = locks.computeIfAbsent(key, k -> new Object());synchronized (lockObject) {// 关键代码部分,在锁的保护下执行System.out.println("Thread " + Thread.currentThread().getName() + " is executing for key: " + key);}}​public static void main(String[] args) {String key1 = "data1";String key2 = "data2";​Thread thread1 = new Thread(() -> doSomethingUnderLock(key1));Thread thread2 = new Thread(() -> doSomethingUnderLock(key1));Thread thread3 = new Thread(() -> doSomethingUnderLock(key2));​thread1.start();thread2.start();thread3.start();}}

在这个示例中:

  • 首先创建了一个ConcurrentHashMap名为locks,用于存储不同字符串对应的锁对象。

  • doSomethingUnderLock方法中,通过computeIfAbsent方法,如果ConcurrentHashMap中不存在给定key对应的锁对象,就创建一个新的Object作为锁对象并放入ConcurrentHashMap中。这样确保了每个不同的字符串都有唯一的锁对象与之对应。

  • 然后使用synchronized关键字对获取到的锁对象进行同步,这样可以保证对于相同的字符串,在同一时间只有一个线程可以执行关键代码部分。

在这个例子中,新创建的Object是对应key(字符串)在ConcurrentHashMap中的value。 具体来说,当调用locks.computeIfAbsent(key, k -> new Object());时,如果ConcurrentHashMap中不存在给定的key,那么就会创建一个新的Object实例并作为这个key的对应值存储在ConcurrentHashMap中。这样做的目的是为了每个不同的key都有一个唯一的对象可以用来作为锁,以确保不同的key在多线程环境下可以独立地进行同步操作。

这个示例展示了如何利用ConcurrentHashMap来为不同的字符串创建独立的锁,以实现对不同资源的并发安全访问。例如,在多线程环境下,如果有多个线程需要对不同的数据集进行操作,而每个数据集可以用一个字符串来标识,就可以使用这种方式来确保对每个数据集的操作都是线程安全的。

借鉴:B站-徐庶老师视频

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

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

相关文章

OCI 简介:Kubernetes 环境下从代码到容器的全流程

OCI 简介 在容器化技术的演进中&#xff0c;OCI&#xff08;Open Container Initiative&#xff09;提供了一套标准化的规范&#xff0c;帮助统一容器的构建、分发和运行。OCI 规范包含三个部分&#xff1a; OCI Image-spec&#xff1a;定义了容器镜像的结构&#xff0c;确保…

WAF,全称Web Application Firewall,好用WAF推荐

WAF&#xff0c;全称Web Application Firewall&#xff0c;即Web应用防火墙&#xff0c;是一种网络安全设备&#xff0c;旨在保护Web应用程序免受各种Web攻击&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等。 WAF通…

STM32堆栈溢出Bug

可以看到x和buf交换位置后&#xff0c;x处于0x200006B0地址上是不会被函数B影响到的&#xff0c;实际上B函数对buf赋值的过程是出现了越界行为的&#xff0c;所以导致了x在buf地址之后的话会被意外修改掉值。

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中&#xff0c;突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力&#xff0c;国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…

Nacos笔记

nacos注册中心&#xff1a; nacos注册中心得单击非持久化搭建&#xff1a; 单机&#xff1a;指的是 Nacos 运行在单个实例上&#xff0c;通常用于开发和测试环境。非持久化&#xff1a;表示注册的信息&#xff08;如服务实例、元数据等&#xff09;不会被保存在数据库中。Nac…

Python 从入门到实战29(目录的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了文件的打开、创建、关闭、读取的相关知识。今天…

智慧政务助力实现服务民生新突破

在数字化转型的浪潮中&#xff0c;中国移动紧密结合人工智能&#xff08;AI&#xff09;技术&#xff0c;推动政务服务的智能化升级。近日&#xff0c;中国移动正式发布政务大模型3.0版本&#xff0c;以科技创新提升政务效率&#xff0c;实现服务民生的新突破。 为什么…

从0到1训练私有大模型技能与应用实现

1.背景 近期&#xff0c;GPT大模型的发布给自然语言处理&#xff08;NLP&#xff09;领域带来了令人震撼的体验。随着这一事件的发生&#xff0c;一系列开源大模型也迅速崛起。依据一些评估机构的评估&#xff0c;这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

关于Pencils Protocol 近期市场活动,通读这篇就够!

Pencils Protocol是Scroll上综合性的DeFi协议&#xff0c;自9月18日开始其陆续在Tokensoft、Bounce、Coresky等平台开启DAPP通证的销售&#xff0c;并分别在短期内完成售罄。吸引了来自韩国、CIS、土耳其等70多个国家的5万多名认证用户&#xff0c;反响热烈&#xff0c; Pencil…

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本&#xff1a;小皮面板-好用、安全、稳定的Linux服务器面板&#xff01; 安装后先开启mysql再开启apache&#xff0c;遇到mysql启动不了的情况&#xff0c;最后重装了phpstud…

一窥AI大模型奥秘:技术前沿与产业应用双轮驱动

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度重塑着我们的生活与工作方式。其中&#xff0c;AI大模型作为技术的最前沿&#xff0c;不仅引领着技术体系的革新&#xff0c;更是产业实践与未来趋势的关键所在。 近期&#xff0c;有幸…

YOLOv8+注意力机制+PyQt5玉米病害检测系统完整资源集合

资源包含可视化的玉米病害检测系统&#xff0c;基于最新的YOLOv8注意力机制训练的玉米病害检测模型&#xff0c;和基于PyQt5制作的可视玉米病害系统&#xff0c;包含登陆页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的七类玉米病害&#xff1a;矮花叶病…

Linux防火墙-什么是防火墙

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 什么是防火墙 我们想象一下把每台服务器当成一个小区&#xff0c;我们去访问另外一个小区的朋友&#xff0c;我们需要经过什…

黑马头条day4 自媒体文章自动审核

阿里云内容安全调用 其实这个接口调用不是很难 但是需要花钱 就没买 我开了按量计费 但是还是不行 所以就没测试 于是尝试自己写返回成功值 效果不好 后来发现不如直接在函数里边取消调用文字和图片审核 这样更简单 远程调用与降级处理 这里有个bug调试了好久 第一个就是总…

Cannon-es.js物理引擎中物体动力控制的深度探索

本文目录 前言1、cannon-es给物体施加力1.1 前置代码1.2 效果1.3 给小球施加力1. applyForce效果 2. applyImpulse效果 3. applyLocalImpulse效果 4. applyTorque效果 区别总结 前言 在三维物理引擎的世界里&#xff0c;Cannon-ES以其轻量级和高效能著称&#xff0c;为开发者提…

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像 docker pull prom/node-exporter docker pull grafana/grafana docker pull prom/prometheus docker pull prom/alertmanager 其中 prom/node-exporter&#xff1a;用于收集主机系统信息和指标的 grafana/grafana&#xff1a;是一个用于可视化和分…

NRF21540—低功耗蓝牙,蓝牙mesh、Thread和Zigbee和2.4 GHz私有协议范围扩展射频前端模块

nRF21540是一款射频前端模块(FEM)&#xff0c;可用于改善短距离无线产品的传输范围和连接鲁棒性。作为一款辅助性设备&#xff0c;nRF21540是一种“即插即用型”的无线传输范围扩展器&#xff0c;可与nRF52和nRF53系列的高级多协议无线SoC搭配使用&#xff0c;所需的外部器件数…

11. Map和Set

一、二叉搜索树 1. 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根…

解析 Pencils Protocol 价值逻辑,$DAPP为何是本轮的Alpha资产?

本轮市场周期中&#xff0c;DeFi市场已经长期处于边缘位置&#xff0c;老牌蓝筹DeFi通证仍旧能维持高市值但币价增长&#xff0c;而很多新生代DeFi项目创新不足难以推动叙事的发展&#xff0c;面向市场后难有亮眼表现&#xff0c;DeFi市场再难寻Alpha投资机会。 而随着Pencils …

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…