【Java并发编程 线程安全】21.线程安全集合
多线程环境使用ArrayList
1.Vector(已过时)
在Java早期使用Vector,在remove、get、set、add、size都是通过synchronized修饰,但是Vector已经过时了,效率比较慢。
2.Synchronized或者ReentrantLock修饰
3.Collections.synchronizedList
List<String> arrayList = new ArrayList<>();
arrayList.add("123");
arrayList.add("234");
arrayList.add("345");
List<String> strings = Collections.synchronizedList(arrayList);
Collections.synchronizedList底层返回的是SynchronizedList,关键代码是同步代码块如下:
public E get(int index) {synchronized (mutex) {return list.get(index);}
}
public E set(int index, E element) {synchronized (mutex) {return list.set(index, element);}
}
public void add(int index, E element) {synchronized (mutex) {list.add(index, element);}
}
public E remove(int index) {synchronized (mutex) {return list.remove(index);}
}
4.CopyOnWriteArrayList(写数组的拷贝)
List<String> list = new CopyOnWriteArrayList<String>();
多线程环境使用HashMap
1.HashTable(已过时)
效率太慢,HashMap后期做了很多优化,Hash Table没有同步
2.ConcurrentHashMap
内部采用分段锁机制,效率比较高。
3.Collections.synchronizedMap
Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
Set
1.CopyOnWriteArraySet
2.Collections.synchronizedSet()
3.Collections.newSetFromMap()
Set<String> setFromMap = Collections.newSetFromMap(new ConcurrentHashMap<>());
4.ConcurrentHashMap.newKeySet()
队列
使用Jdk提供的阻塞队列BlockingQueue
- ArrayBlockingQueue 数组有界队列
- ConcurrentLinkedQueue 链表有界队列
- PriorityBlockingQueue 优先级排序无界队列
- DelayQueue 延时无界队列
如果要操作线程不安全的容器,如何让它变成线程安全?
List: Collections.synchronizedList();Map: Collections.synchronizedMap();Set: Collections.synchronizedSet();
【Java并发编程 线程安全】21.线程安全集合相关推荐
- [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ...
[Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ... 摘要 介绍 Java 并发包里的几个主要 ExecutorService . 正文 ...
- Java 并发编程——Executor框架和线程池原理
Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...
- [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...
[Java并发编程(二)] 线程池 FixedThreadPool.CachedThreadPool.ForkJoinPool?为后台任务选择合适的 Java executors ... 摘要 Jav ...
- Java并发编程|第二篇:线程生命周期
文章目录 系列文章 1.线程的状态 2.线程生命周期 3.状态测试代码 4.线程终止 4.1 线程执行完成 4.2 interrupt 5.线程复位 5.1interrupted 5.2抛出异常 6. ...
- 《Java并发编程的艺术》——线程(笔记)
文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...
- java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍
转载自 java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...
- 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...
- Java并发编程:进程和线程之由来
2019独角兽企业重金招聘Python工程师标准>>> Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编 ...
- Java并发编程(08):Executor线程池框架
本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...
- Java并发编程(8)——常见的线程安全问题
线程安全问题: 多个线程同时执行也能工作的代码就是线程安全的代码 如果一段代码可以保证多个线程访问的时候正确操作共享数据,那么它是线程安全的. 具体说明: java并发线程实战(1) 线程安全和机制原 ...
最新文章
- mooc python_MOOC python笔记(一):python语言概述
- 接力黄琨儿同志的《给玩命工作却对现状不满的IT人》
- book: Effective Java
- 去除残缺条目java_为什么说Java匿名内部类是残缺的闭包
- 禁用oracle的默认账户,Oracle EBS默认的账户
- 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
- CURL+preg_match()
- 无法更改硬件兼容性时解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”的方法
- Golang 信息采集
- win7计算机资源管理器卡住,Win7电脑资源管理器一直卡住怎么办_Win7电脑资源管理器一直卡住的解决方法 - 系统家园...
- 分析码农骄傲自大的几点原因
- 【2018-CCPC青岛网赛】 HDU - 6441 Find Integer
- (附源码)springboot工单管理系统 毕业设计 964158
- Centos 7 部署suricata流量检测
- AbsoluteLayout
- 人脸识别道闸你不知道的那些事
- !外贸邮件处理经验谈
- cc双聚类 matlab,mtba 双聚类matlab工具箱,包含各种主要的 算法:cc、floc、opsm、bimax、b LAS等 256万源代码下载- www.pudn.com...
- 近期企业财报 | 蔡司、埃森哲、尚德教育、卡塔尔国民银行发布业绩
- 惠普磁带备份机支持备份几台服务器,惠普助力广东医学院附属医院信息化
热门文章
- 云桌面部署_互助法院部署“云桌面”助力网上办案
- 数值孔径NA、分辨率极限与衍射极限(转)
- 中国危废处理行业投资策略分析及投资趋势展望报告2022-2028年版
- ruoyi springclound开发笔记
- ESDB论文重点整理
- Linux 如何给予普通用户使用管理员权限操作
- 用户留存率问题计算详解
- 计算机毕设之化妆品管理系统
- 2021(SSL) 自监督学习最新力作:Barlow Twins: Self-Supervised Learning via Redundancy Reduction
- Hadoop启动命令