容器的常用方法和线程安全(Map、List、Queue)

news2024/10/5 14:22:26

一、Map

1. HashTable

线程安全的Map,用synchronized锁

2. Collections.synchronizedMap

Collections.synchronizedMap(new HashMap()) 可以把HashMap变成线程安全的,锁粒度比HashTable稍微小一点

3. ConcurrentHashMap

ConcurrentHashMap主要提高的是读的效率,数据量较多时,写效率没有HashTable高

无序:HashMap =》ConcurrentHashMap

有序(按大小排序):TreeMap =》ConcurrentSkipListMap

二、List

CopyOnWriteArrayList:写时复制,读的时候不加锁,写的时候加锁,复制原来的List,并添加新元素

CopyOnWriteSet

三、Queue:

多线程的情况下,多考虑Queue,少考虑List

1. 基本用法

offer方法是添加数据的,有一个boolean的返回值;

add方法也是添加数据的,没有返回值,添加不进去会抛异常

peek:取数据,并不会remove

poll:取数据,并remove队列中的,原子性是通过CAS实现的

2. BlockingQueue

put:添加数据,如果数据满了,会阻塞等待

take:取数据,如果数据为空了,会阻塞等待

LinkedBlockQueue:最大长度是int的最大值

3. DelayQueue

DelayQueue:按照delayTime排序,时间越短,越靠前

4. PriorityQueue

PriorityQueue:值按顺序排列

5. SynchronousQueue

SynchronousQueue:容量为0,需要有其他线程等待取值,才能put进去值,用于两个线程交换数据

6. LinkedTransferQueue

LinkedTransferQueue:transfer方法,等待其他线程往队列里面放值,等到该值被取走后继续运行

 

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

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

相关文章

【C++】STL - vector使用和模拟实现

🐱作者:傻响 🐱专栏:《C/C - STL》 🔥格言:你只管努力,剩下的交给时间! ​ 目录 No.1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的接口 vector的构造函数接口 vector的…

最近很火的电视剧《点燃我,温暖你》男主角学神和女主角课代表计算机考试实现的跳动的爱心,全程用代码复原真实的实现

最近很火的电视剧《点燃我,温暖你》男主角学神和女主角课代表计算机考试实现的跳动的爱心,全程用代码复原真实的实现。 学神考试100分,只是因为试卷只有100分! 该剧改编自作家Twentine创作的小说《打火机与公主裙》,讲…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.5 流控效果【排队等待】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.5 流控效果【排队等待】31.5.1 流控效果【排队等待】31.5.2 案例31.5.3 总结31 限流…

JAVA物业管理系统带小程序源码

源码分享!文末卡片查看联系方式获取源码。 基于Web,使用MySQL数据库,使用安全框架:shiro, 使用技术:springspringMVCMybatis,小程序 前端框架:layui 编译器:IntelliJ IDEA 项目构…

Linux消息中间件-RabbitMQ

Linux消息中间件-RabbitMQ 消息中间件 MQ简介 MQ 全称为Message Queue, 消息队列。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通…

Python字符串关键点分析介绍

Python字符串关键点有下面几点: 1.一些引号分隔的字符 你可以把字符串看出是Python的一种数据类型,在Python单引号或者双引号之间的字符数组或者连续的字符集合。在python中最常用的引号为(’’)和("")。两者的功能是一…

笔试强训(四十一)

目录一、选择题二、编程题2.1 Emacs计算器2.1.1 题目2.1.1 题解一、选择题 (1)某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0.若该主机向其所在子网发送广播分组,则目的地址可以是(D) A.180.80.7…

【mmdetection系列】mmdetection之训练框架讲解

这一篇是一个比较宽泛的训练框架讲解与说明。会大致说一些模型训练过程中需要的一些模块,datasets、backbone、neck、head、loss等。会先将框架结构,再讲核心机制。 目录 1.框架结构 1.1 configs 1.1.1 训练配置 1.1.2 datasets 1.1.3 models 1.1.…

【Python】基本语法 4 (列表和元组)

列表和元组1. 列表是什么,元组是什么2. 创建列表3. 访问下标4. 切片操作5. 遍历列表元素6. 新增元素7. 查找元素8. 删除元素9. 连接元素10. 关于元组1. 列表是什么,元组是什么 在编程中,变量就是内存空间,用来表示/存储数据。 如果…

java之注解的定义和使用

初识注解: 注解的概念: 注解是从JDK5.0开始引入的新技术,它不是程序本身,但是和注释有相同的作用,都能够对程序做出一定的解释,并且注解能够被其他编译器所读取 注解的格式: 注解是以“注释…

代码随想录训练营第43天|LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

参考 代码随想录 题目一:LeetCode 1049. 最后一块石头的重量 II 这个题和之前的“416 分割等和子集”非常的类似,如果给出的stones[]数组能被分成相等的两个数组,那么剩余石头的最小重量就是0。求解思路和分割等和子集一样,只是…

前端工程化实践——javaScript 手写rollup

webpack打包非常繁琐,打包体积较大。rollup主要打包js库。vue/react/angular都在用rollup作为打包工具。 rollup项目初体验 新增文件夹rollupTest 初始化项目:npm init -y 安装依赖 npm install rollup -D 修改配置文件package.json {"name&q…

Python模块fileinput操作文件和目录操作总结

前言 之前介绍Python的 pathlib 模块可以有效的路径及文件查找等方便操作,本篇介绍一个相对 readlines() 获取文件内容更高效的用法 fileinput模块 对一个或者多个文件的内容迭代遍历(类似文件操作的readlines()),但是返回的是迭代对象&…

ffmpeg库编译安装及入门指南(Windows篇)- 2022年底钜献

最近项目需要,使用了 ffmpeg 做摄像头视频采集和串流。这几天有点时间,打算把相关的一些知识记录分享一下。 在撰写本文时,我又在另外一台电脑上把 ffmpeg 重新安装了一遍,所以绝对真实靠谱!如果你觉得文章写得还不错…

MAC QT OpenGL 波浪特效

目录 一.MAC QT OpenGL 波浪特效效果演示 1.原始图片2.效果演示 二.MAC QT OpenGL 波浪特效源码下载三.其他平台波浪特效版本 1.IOS 演示效果2.Windows OpenGL ES 演示效果3.Windows OpenGL 演示效果 四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >>…

安装微信开发者工具及创建小程序

大纲: 一、官网:微信公众平台微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。https://mp.weixin.qq.com/ 开发者工具下载页面https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html《开发者…

【教学类-22-02】20221210《八款字体的描字帖-4*4格整张-不用订书机》(大班主题《我是中国人-中国字》)

成品样式: 48号字(适应2-3个名字的大小) 44号字(适应4个名字大小(2-3个名字也可以用,字会稍微小)) 打印样式: 背景需求: 观摩中3班做“描花体字”的本子的情…

【前沿技术RPA】 一文了解 UiPath 状态机 State Machine

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:UiPath 🦀专栏简介:UiPath在传统的RPA(Robotic…

【流量回放探索】啄木鸟流量回放平台

啄木鸟流量回放平台 项目简介 本项目是基于RuoYi-Vue单应用版本流量回放引擎基于goreplay演示系统基于newbee-mall-api-go 如果你想从录制开始体验,需要搭建演示系统newbee-mall-api-go ,同时需要将gor 部署在演示系统服务中,搭建kafka以便…

[附源码]Python计算机毕业设计SSM基于技术的高校学生勤工俭学管理系统的设计与开发(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…