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

线程安全 List 效率测试

List 常见类以及各自优缺点可自行参考 https://blog.csdn.net/weixin_39883065/article/details/111197724

本机环境

java 版本:1.8.0_161
window 信息:
请添加图片描述

测试代码

下面通过代码测试 List 线程安全类 Vector、Collections.synchronizedList(List list)、CopyOnWriteArrayList

测试添加 1 亿数据,开启 100 个线程,每个线程插入 100万

public class TestList {public static void main(String[] args) throws InterruptedException {long startTime = System.currentTimeMillis();// 线程不安全// List<Integer> list = new ArrayList<>();// 线程安全 100000000 耗时 27357// List<Integer> list = new Vector<>();// 线程安全 100000000 耗时 22023List<Integer> list = Collections.synchronizedList(new ArrayList<>());// 线程安全 100000000 耗时//List<Integer> list =new CopyOnWriteArrayList<>();int threadNum = 100;CountDownLatch countDownLatch = new CountDownLatch(threadNum);for (int i = 0; i < threadNum; i++) {Thread thread = new Thread(() -> {for (int j = 0; j < 1000000; j++) {list.add(j);}countDownLatch.countDown();});thread.start();}countDownLatch.await();long endTime = System.currentTimeMillis();System.out.println(list.size());System.out.println(list.getClass()+"耗时:          "+(endTime-startTime));}
}

ArrayList 结果
请添加图片描述
Collections.synchronizedList(List list) 结果
请添加图片描述
Vector 结果
请添加图片描述
CopyOnWriteArrayList 结果,暂无结果,运行超 20 分钟,放弃测试

总结

  • 读多写少的情况下,推荐使用 CopyOnWriteArrayList 方式
  • 读少写多的情况下,推荐使用 Collections.synchronizedList() 和 Vector 差距不大

相关文章:

线程安全 List 效率测试

List 常见类以及各自优缺点可自行参考 https://blog.csdn.net/weixin_39883065/article/details/111197724 本机环境 java 版本&#xff1a;1.8.0_161 window 信息&#xff1a; 测试代码 下面通过代码测试 List 线程安全类 Vector、Collections.synchronizedList(List lis…...

LeetCode 热题 C++ 581. 最短无序连续子数组 617. 合并二叉树

581. 最短无序连续子数组 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入&am…...

鉴源论坛 · 观模丨模型检查综述

作者 | 李建文 华东师范大学软件工程学院博导 版块 | 鉴源论坛 观模 01 模型检查的历史 模型检查是一种起源于20世纪70年代末的形式化验证技术。该技术最初由Edmund M. Clarke、E. Allen Emerson和Joseph Sifakis提出&#xff0c;他们因在模型检查领域的贡献而获得了2007年的…...

Easy Deep Learning——池化层

池化是什么&#xff1f;它有什么作用&#xff1f; 还是草地的场景&#xff0c;把草地分成一块块的网格&#xff0c;数量还是太多了&#xff0c;如何继续简化输入数据呢? 这时候可以只取一块网格中所有的小草的大小形状的平均值或者最大值作为一个输入数据&#xff0c;这样就大…...

TryHackMe-VulnNet: Active(ez 域渗透)

VulnNet: Active VulnNet Entertainment在他们以前的网络中遇到了不好的时光&#xff0c;该网络遭受了多次破坏。现在&#xff0c;他们移动了整个基础架构&#xff0c;并再次聘请您作为核心渗透测试人员。您的目标是获得对系统的完全访问权限并破坏域。 这应该是我在thm打的最…...

TencentOS Server 安装 PostgreSQL

TencentOS 简介 2019 年&#xff0c;随着腾讯公司外部客户的需求&#xff0c;以及公司开源协同战略的推进&#xff0c;tlinux 对外开源并进行了品牌升级&#xff0c;升级为 TencentOS Server。TencentOS 包含三大场景&#xff0c;分别如下&#xff1a; TencentOS Server&…...

多线程的风险 --- 线程安全

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;低头赶路&#xff0c;敬事如仪&#xff1b;自知自心&#xff0c;其路则明。 目 录&#x1f378;一. 线程不安全&#x1f379;二. 线程不安全的原因&#x1f…...

Linux信号详解

文章目录Linux信号什么是信号**从生活角度理解: **技术应用角度的信号进程的注意事项信号概念用kill -l命令可以察看系统定义的信号列表信号处理常见方式概览信号产生通过终端按键产生信号使用signal函数自定义SIGINT信号的处理方式使用sigprocmask函数阻塞2号信号和40号信号vo…...

JAVA使用POI操作EXCEL

设置公式totalRow.createCell(4).setCellFormula("SUM(E9:E35");// 执行公式wb.setForceFormulaRecalculation(true);合并单元格sheet.addMergedRegion(new CellRangeAddress(0, 0, 3, 7));单元格格式CellStyle cellStyle wb.createCellStyle();// 字体XSSFFont fon…...

只做笔记有必要买apple pencil吗?苹果笔的代替笔推荐

如果仅仅使用IPAD来进行打游戏和看剧的话&#xff0c;未免有些浪费。ipad的作用还是挺大的&#xff0c;可以用来做学习笔记&#xff0c;也可以用来做绘画&#xff0c;也可以用来做一些重要的内容。很多人都会认为&#xff0c;苹果的电容笔很好用&#xff0c;但是价格上要比一般…...

Hive---sqoop安装教程及sqoop操作

sqoop安装教程及sqoop操作 文章目录sqoop安装教程及sqoop操作上传安装包解压并更名添加jar包修改配置文件添加sqoop环境变量启动sqoop操作查看指定mysql服务器数据库中的表在hive中创建一个teacher表跟mysql的mysql50库中的teacher结构相同将mysql中mysql50库中的sc数据导出到h…...

【C++】register 关键字

文章目录一. 什么是寄存器&#xff1f;二. 为什么要存在寄存器&#xff1f;三. register 修饰变量一. 什么是寄存器&#xff1f; 我们都知道&#xff0c;CPU主要是负责进行计算的硬件单&#xff0c;但是为了方便运算&#xff0c;一般第一步需要先把数据从内存读取到CPU内&…...

剑指 Offer II 024. 反转链表

题目链接 剑指 Offer II 024. 反转链表 easy 题目描述 给定单链表的头节点 head&#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;h…...

从Linux内核中学习高级C语言宏技巧

Linux内核可谓是集C语言大成者&#xff0c;从中我们可以学到非常多的技巧&#xff0c;本文来学习一下宏技巧&#xff0c;文章有点长&#xff0c;但耐心看完后C语言level直接飙升。 本文出自&#xff1a;大叔的嵌入式小站&#xff0c;一个简单的嵌入式/单片机学习、交流小站 从…...

详解Python的装饰器

Python中的装饰器是你进入Python大门的一道坎&#xff0c;不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello():print "hello!"def say_goodbye():print "hello!" # bug hereif…...

k8s-Pod域名学习总结

k8s-Pod域名学习总结 大纲 k8s内置DNS服务 配置Pod的域名服务 CornDNS配置 默认Pod的域名 自定义Pod的域名 实战需求 1 Pod有自己的域名 2 集群内部的Pod可以通过域名访问其他的Pod 基础准备&#xff1a; 1 k8s 集群版本1.17 k8s内置DNS服务 k8s1.17安装完成后自动创建…...

0405习题总结-不定积分

文章目录1 不定积分的基本概念2 直接积分法-基本积分公式3 第一换元法-凑微分形式法4 第二类换元法5 分部积分求不定积分6 表格法积分7 有理函数求积分后记1 不定积分的基本概念 例1 f(x){x1,x≥012e−x12,x<0求∫f(x)dxf(x) \begin{cases} x1,\quad x\ge0\\ \frac{1}{2}e^…...

QT 常用控件类型命名参考

拟定的QT的控件命名规则&#xff1a;蛇形命名方式 控件类型开头&#xff0c;以下是QT控件类型命名的参考范例 Buttons Buttons起始字符串对象名称举例Push Buttonbuttonbutton_loginTool Buttontool_button / buttonbutton_switchRadio Buttonradio_button / radioradio_boy…...

MATLAB与图像处理的那点小事儿~

目录 一、学习内容 二、matlab基本知识 三、线性点运算 四、非线性点运算&#xff0c;伽马矫正 五、直方图 1、直方图均衡化 &#xff08;1&#xff09;使用histep函数实现图像均衡化 &#xff08;2&#xff09;使用自行编写的均衡化函数实现图像均衡化 2、直方图规定…...

第十四届蓝桥杯模拟赛(第三期)Java组个人题解

第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解 今天做了一下第三期的校内模拟赛&#xff0c;有些地方不确定&#xff0c;欢迎讨论和指正~ 文章目录第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解填空题部分第一题【最小数】第二题【E…...

基于AI多因子与流动性模型的黄金再定价分析:4500关口修复后的“黄金坑”是否成立?

摘要&#xff1a;本文通过引入AI多因子定价模型&#xff0c;结合流动性压力识别算法、资金流向追踪系统与宏观变量建模&#xff0c;对黄金从5602美元回落至4099美元后的市场行为进行分析&#xff0c;重点解析抛售驱动逻辑、相关性漂移及4500美元关口的再定价机制。一、AI趋势重…...

隔离变送器VS普通变送器:为什么你的PLC信号总受干扰?(实测XYS-5531抗干扰性能)

隔离变送器VS普通变送器&#xff1a;为什么你的PLC信号总受干扰&#xff1f;&#xff08;实测XYS-5531抗干扰性能&#xff09; 在工业自动化现场&#xff0c;信号干扰就像潜伏的"隐形杀手"——它不会直接摧毁设备&#xff0c;却能让控制系统频繁误动作、数据采集失真…...

Ghidra二进制分析工具新手指南:从安装到高效逆向实践

Ghidra二进制分析工具新手指南&#xff1a;从安装到高效逆向实践 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 工具定位&a…...

AI原生推荐:如何实现端到端的训练?

AI原生推荐&#xff1a;如何实现端到端的训练&#xff1f;关键词&#xff1a;AI原生推荐、端到端训练、深度学习推荐系统、推荐模型架构、多模态融合摘要&#xff1a;本文将从“AI原生推荐”的核心需求出发&#xff0c;用“快递物流”“餐厅点菜”等生活化类比&#xff0c;逐步…...

w3x2lni:魔兽地图跨版本转换的技术突破与实践指南

w3x2lni&#xff1a;魔兽地图跨版本转换的技术突破与实践指南 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni 问题引入&#xff1a;版本壁垒下的魔兽地图开发困境 在魔兽争霸III的地图开发领域&#xff0c;版本迭…...

OpenClaw语音交互方案:nanobot镜像对接语音输入输出

OpenClaw语音交互方案&#xff1a;nanobot镜像对接语音输入输出 1. 为什么需要语音交互能力 作为一个长期使用OpenClaw的技术爱好者&#xff0c;我一直在思考如何让这个强大的自动化工具更加"人性化"。传统的命令行和文本交互方式虽然高效&#xff0c;但对于不擅长…...

从DVP到VGA:基于FPGA的OV7670图像采集与实时显示系统设计

1. OV7670摄像头与DVP接口基础 OV7670是一款经典的VGA分辨率图像传感器&#xff0c;在嵌入式视觉领域应用广泛。我第一次接触这款摄像头是在2015年的一个智能门铃项目上&#xff0c;当时就被它小巧的体积和简单的接口所吸引。这款传感器最大支持640x480分辨率&#xff0c;输出格…...

vLLM-v0.17.1应用场景:跨境电商多语言商品描述生成系统

vLLM-v0.17.1应用场景&#xff1a;跨境电商多语言商品描述生成系统 1. 跨境电商面临的商品描述挑战 跨境电商企业每天需要为成千上万的商品生成多语言描述&#xff0c;传统人工编写方式面临三大痛点&#xff1a; 人力成本高&#xff1a;每个语种都需要专业翻译人员&#xff…...

YOLOE新手教程:如何用一行代码加载预训练模型

YOLOE新手教程&#xff1a;如何用一行代码加载预训练模型 1. 引言&#xff1a;为什么选择YOLOE&#xff1f; 在计算机视觉领域&#xff0c;目标检测一直是核心任务之一。传统检测模型需要预先定义好所有可能的类别&#xff0c;遇到新物体时往往束手无策。YOLOE&#xff08;Yo…...

Qwen3.5-4B-Claude-Opus基础教程:llama.cpp量化参数对精度影响实测

Qwen3.5-4B-Claude-Opus基础教程&#xff1a;llama.cpp量化参数对精度影响实测 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该版本以GGU…...