线程安全的集合类
文章目录
- 多线程环境使⽤`ArrayList`
- 线程不安全
- 线程安全
- 可以使用 `ReentrantLock` 或 `synchronized`来保护 `ArrayList` 的访问。
- 使用同步包装器
- 使用 `CopyOnWriteArrayList`
- **“写时复制”机制**
- 多线程环境使⽤队列
- 多线程环境使⽤哈希表
- Hashtable
- ConcurrentHashMap
- HashMap、HashTable、ConcurrentHashMap的区别
Vector
、
Stack
、
HashTable
是线程安全的,但不建议⽤,其他的集合类不是线程安全的。
多线程环境使⽤ArrayList
在单线程环境下不涉及线程安全问题,但是,在多线程环境中直接使用 ArrayList
是不安全的。
线程不安全
如果多个线程同时对同一个 ArrayList
进行读写操作(尤其是写操作),可能会导致数据不一致或抛出异常(如 ConcurrentModificationException
)。
package com.zxy.lesson12;import java.util.ArrayList;
import java.util.List;public class Demo12_03 {public static void main(String[] args) {// 先定义一个集合对象(线程不安全)List<Integer> list = new ArrayList<>();// 多个线程同时对这个集合进行读写操作--线程不安全for (int i = 0; i < 10; i++) {int j = i + 1;Thread t = new Thread(() -> {// 写list.add(j);// 读System.out.println(list);});// 启动线程t.start();}}
}
线程安全
可以使用 ReentrantLock
或 synchronized
来保护 ArrayList
的访问。
使用同步包装器
可以通过 Collections.synchronizedList()
方法将 ArrayList
包装为线程安全的集合。
package com.zxy.lesson12;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class Demo12_04 {public static void main(String[] args) {// 创建一个普通集合对象List<Integer> arrayList =
相关文章:
线程安全的集合类
文章目录 多线程环境使⽤`ArrayList`线程不安全线程安全可以使用 `ReentrantLock` 或 `synchronized`来保护 `ArrayList` 的访问。使用同步包装器使用 `CopyOnWriteArrayList`**“写时复制”机制**多线程环境使⽤队列多线程环境使⽤哈希表HashtableConcurrentHashMapHashMap、H…...
【如何实现 JavaScript 的防抖和节流?】
如何实现 JavaScript 的防抖和节流? 前言 防抖(Debounce)和节流(Throttle)是 JavaScript 中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详…...

C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别
当调用 System.IO.File.Copy 方法时,第三个参数 overwrite 控制着如果目标位置已经存在同名文件的情况下如何处理。 1、当 overwrite 设置为 true 在这种情况下,即使目标路径下已经有相同名称的文件,该方法也会无条件地覆盖现有的文件。这不…...

力扣 买卖股票的最佳时机
贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…...

蚁剑(AutSword)的下载安装与报错解决
蚁剑(AutSword)的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…...

【全栈开发】----Mysql基本配置与使用
本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…...
Spring Boot项目的基本设计步骤和相关要点介绍
以下是一个关于Spring Boot项目的基本设计步骤和相关要点介绍,我们以一个简单的示例应用——员工管理系统为例进行说明: 一、项目概述 员工管理系统旨在实现对公司员工信息的有效管理,包括员工基本信息录入、查询、更新以及删除等功能。通过Spring Boot框架来快速搭建后端…...
【Spring快速入门】不断更新...
一、Java基础 1、注解 1.3、自定义注解 springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)_springboot在类或者方法上加自定义注解-CSDN博客 同平台的新林。大佬就总结的很好,最近写得项目利用aop切面编程中的Aut…...
nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作
要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…...
HTML之JavaScript DOM(document)编程处理事件
HTML之JavaScript DOM(document)编程处理事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...
5.【线性代数】—— 转置,置换和向量空间
五 转置,置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义: 用于行互换的矩阵P。 之前进行ALU分解时,可能存在该行主元为0,要进行行互换,即PALU 性质࿱…...

移动通信发展史
概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通:成立于 2000 年…...
Python MoviePy 视频处理全攻略:从入门到实战案例
第1章 环境安装与配置 # 案例1:安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg:https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...

uniapp webview嵌入外部h5网页后的消息通知
最近开发了个oa系统,pc端的表单使用form-create开发,form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。移动端使用uniapp开发,但是因为form-create移动端只支持vant,不支持uniapp。官…...

macos安装jmeter测试软件
java环境安装 a. 验证安装环境 java -version # 如果有版本信息,说明已安装 b. 安装jdk # 安装 Homebrew(如未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装 O…...
【virtiofs】ubuntu24.04+qemu7.0调试virtiofs
文章目录 编译qemu编译buildroot编译linux-6.8.1编译virtiofsd启动脚本qemu调试方法环境: win11 + vmware17 ubuntu24.04 buildroot git clone git://git.busybox.net/buildroot linux-6.8.1 https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.8.1.tar.gz virti…...

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://blog.cs…...
MoE硬件部署
文章目录 MoE硬件部署硬件需求**专家硬件映射:模块化计算单元****路由硬件加速:门控网络专用单元****内存与通信优化****能效控制策略****实例:假设部署Mixtral 8x7B到自研AI芯片** 资源分配硬件资源预分配(编译时)运行…...
MYSQL中的性能调优方法
MySQL性能调优是数据库管理的重要工作之一,目的是通过调整系统配置、优化查询语句、合理设计数据库架构等方法,提高数据库的响应速度和处理能力。以下是常见的MySQL性能调优方法,结合具体的案例进行说明。 1. 优化查询语句 查询语句是数据库…...
Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南
文章目录 设计模式三大类型统一区分与记忆指南**一、创建型模式(对象如何生?)****二、结构型模式(对象如何组?)****三、行为型模式(对象如何动?)****1. 行为型类模式&…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...