当前位置: 首页 > news >正文

【Java】并发集合

并发集合(java.util.concurrent)

一、List

CopyOnWriteArrayList(ReentrantLock实现线程安全)

(1)并发修改(操作)时保证线程安全:

                通过ReentrantLock实现多个线程并发修改时的线程安全同步(添加元素的同时,不允许删除)

                添加新元素:list.add("")

                按照指定下标替换元素:list.set(index, element)

                按照指定下标删除元素:list.remove(0)

(2)并发读取:

                没有加锁,允许多个线程同时并发读取;但是读取时,可能产生脏读(读取的同时,允许写入操作)。

(3)CopyOnWrite思想:修改时将原数组内容复制Copy到新数组内,在新数组内修改,然后替换

二、Set

CopyOnWriteArraySet(ReentrantLock实现线程安全)

        内部通过一个CopyOnWriteArrayList实现。

三、Queue

BlockingQueue阻塞队列(ReentrantLock实现线程安全)

        阻塞队列:由两个线程,分别进行读写(takeput)操作;读取时,不允许写入,如果队列为空,则读取线程阻塞;写入时,不允许读取,如果队列已满,则写入线程阻塞。

        ArrayBlockingQueue:有界队列

        LinkedBlockingQueue:无界队列

         应用:生产者-消费者模型

// 生产者-消费者模型
public class Test01 {public static void main(String[] args) {// 自增ID (原子性)AtomicInteger number = new AtomicInteger(1);// 保存生产者数据的阻塞队列LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>();  // LinkedBlockingQueue<>(3) 阻塞队列最多保存3个生产者数据// 创建线程池ThreadPoolExecutor executor = new ThreadPoolExecutor(6, 6, 0, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());// 1个生产者线程executor.execute(() -> {// 生产10个数据for (int i = 1; i <= 10; i++) {String data = "数据" + number.getAndIncrement();System.out.println("【生产者】生成:" + data);try {// 保存至阻塞队列queue.put(data);  // 入队// 模拟延迟Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});// 5个消费者线程for (int i = 1; i <= 5; i++) {executor.execute(() -> {while (true){try {String data = queue.take();System.out.println("【消费" + Thread.currentThread().getName() + "】获取:" + data);} catch (InterruptedException e) {e.printStackTrace();}}});}}
}

四、Map

ConcurrentHashMap

(1)JDK1.7:通过分段锁实现线程安全

(2)JDK1.8:通过 synchronized+CAS实现线程安全

                当产生哈希冲突时,通过synchronized将根节点(链表头节点或树根节点)作为锁,进行线程的同步安全;

                在没有产生哈希冲突时,通过CAS进行无锁化操作,降低synchronized进行线程同步操作所引发的性能下降。

相关文章:

【Java】并发集合

并发集合&#xff08;java.util.concurrent&#xff09; 一、List CopyOnWriteArrayList&#xff08;ReentrantLock实现线程安全&#xff09; &#xff08;1&#xff09;并发修改&#xff08;写操作&#xff09;时保证线程安全&#xff1a; 通过ReentrantLock实现多个线程并…...

活动邀请|景联文科技与您相约华为全联接大会2024

2024年9月19-21日&#xff0c;第九届华为全联接大会(简称&#xff1a;HUAWEICONNECT2024)将在上海世博展览馆和上海世博中心举办。 作为华为的旗舰盛会&#xff0c;本次大会以“共赢行业智能化”为主题将邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁&#xf…...

周边游|基于springBoot的周边游平台设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任…...

【编程基础知识】mysql是怎样执行一条sql语句的,涉及到哪些环节步骤是,mysql的整体体系结构是啥样的,有哪些组件

一、步骤 MySQL执行一条SQL语句的过程涉及多个环节和步骤。以下是这一过程的概述&#xff1a; 客户端连接&#xff1a;客户端通过连接器&#xff08;Connector&#xff09;向MySQL服务器发起连接请求。身份验证&#xff1a;连接器对用户身份进行验证&#xff0c;确保用户有权…...

如何上传tauri项目到csdn gitcode

如何上传tauri项目到csdn gitcode 首先保证项目目录有.gitignore&#xff0c;避免不必要的文件上传分享。 gitignore文件 # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log*node_modules dist dist-ssr *.local# Editor …...

【速成Redis】02 Redis 五大基本数据类型常用命令

前言&#xff1a; 上一节课&#xff0c;我们对redis进行了初步了解&#xff0c;和安装好了redis。【速成Redis】01 Redis简介及windows上如何安装redishttps://blog.csdn.net/weixin_71246590/article/details/142319358?spm1001.2014.3001.5501 该篇博客&#xff0c;我们正…...

UnLua扩展C++函数和蓝图自定义事件

一、通过BlueprintImplementableEvent标记扩展C函数 1、 这个标记表示C不需要实现&#xff0c;让蓝图/Lua重写。 2、首先在C中将LuaImp函数标记为BlueprintImplementableEvent&#xff0c;不需要实现&#xff0c;然后再GetIndex中调用该函数。 MyBaseActor.h UFUNCTION(Bluepr…...

干耳屎硬掏不出来怎么办?质量最好的可视挖耳勺推荐

很多干耳的小伙伴都会用普通耳勺来掏耳朵。由于普通耳勺由于其盲操作的特性&#xff0c;对于耳道非直线结构的清理存在诸多不便。所以市面上出现了可视挖耳勺&#xff0c;让我们清晰的看到自己耳道&#xff0c;更加安全的清洁耳朵。&#xff0c;可视挖耳勺这款产品在市场上越来…...

谷歌 Chrome 最新版升级:更强的安全检查功能守护你的上网安全

谷歌 Chrome 浏览器产品经理 Andrew Kamau 在最新发布的博文中宣布&#xff0c;Chrome 浏览器迎来了新一轮的安全升级。新版 Chrome 在后台自动运行安全检查功能&#xff0c;采取了额外的主动措施来保障用户的安全。 自动撤销通知权限 新版 Chrome 浏览器采用了一项基于谷歌安…...

深度学习自编码器 - 收缩自编码器(CAE)篇

序言 在深度学习的浪潮中&#xff0c;收缩自编码器&#xff08; Compressive Autoencoder, CAE \text{Compressive Autoencoder, CAE} Compressive Autoencoder, CAE&#xff09;作为自编码器的一种高级形式&#xff0c;正逐步崭露头角。收缩自编码器在保留自编码器核心功能—…...

Dubbo与SpringCloud的区别和优缺点

经常会有同学问我&#xff0c;Dubbo和SpringCloud的选择。甚至也经常会有面试官就这个问题刨根问底。 说实话&#xff0c;其实我不太喜欢回答这个问题&#xff0c;本质上来讲&#xff0c;Dubbo的SpringCloud可以算是完全不同赛道的两种东西&#xff0c;就好像问大家西瓜和土豆我…...

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第二章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …...

pg入门3—详解tablespaces2

pg默认的tablespace的location为空&#xff0c;那么如果表设置了默认的tablespace&#xff0c;数据实际上是存哪个目录的呢? 在 PostgreSQL 中&#xff0c;如果你创建了一个表并且没有显式指定表空间&#xff08;tablespace&#xff09;&#xff0c;或者表空间的 location 为…...

python 爬虫 selenium 笔记

todo 阅读并熟悉 Xpath, 这个与 Selenium 密切相关、 selenium selenium 加入无图模式&#xff0c;速度快很多。 from selenium import webdriver from selenium.webdriver.chrome.options import Options# selenium 无图模式&#xff0c;速度快很多。 option Options() o…...

git分支管理的一些常用规范

一、分支命名规范 1.通常项目经理或者需求方会给需求开发做计划&#xff0c;约定一些编码&#xff0c;例如FN-01。此时这个需求指派给你&#xff0c;这个时候你可以在现有代码仓库的maser分支或者其他约定的开发分支checkout到本地&#xff0c;命名这个需求的开发分支为feat/F…...

GPT-4论文阅读

GPT-4 Technical Report论文阅读 文章目录 GPT-4 Technical Report论文阅读 Abstract训练的稳定性Training processPredictable scaling训练的稳定性多么难能可贵 Capabilities考试成绩传统的benchmark语言方面的能力Visual inputsSteerability LimitationsRisks & mitigat…...

this 指向

this 指向谁? 多数情况下,this 指向调用它所在方法的那个对象。 说得更通俗点,谁调的函数,this 就归谁。当调用方法没有明确对象时,this 就指向全局对象。在浏览器中,指向 window;在 Node 中,指向 Global。(严格模式下,指向 undefined) this 的指向是在调用时决定的…...

【贪心算法】贪心算法一

贪心算法一 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.柠檬水找零 题目…...

windnd.hook_dropfiles中的create_buffer值太小无法拖放长文件名

今天在使用我之前的Python识别拖放的PDF文件再转成文本文件-CSDN博客发现&#xff0c;文件藏在路径太深入的地方&#xff0c;不能打开&#xff0c;因为拖放文件只能读取260个字节的文件名&#xff08;b’路径&#xff09;&#xff0c;再查看windnd.hook_dropfiles函数&#xff…...

Gitlab runner的使用示例(二):Maven + Docker 自动化构建与部署

Gitlab runner的使用示例&#xff08;二&#xff09;&#xff1a;Maven Docker 自动化构建与部署 在本篇文章中&#xff0c;我们将详细解析一个典型的 GitLab CI/CD 配置文件&#xff08;gitlab-ci.yml&#xff09;&#xff0c;该文件主要用于通过 Maven 构建 Java 应用&…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...