线程安全的HashMap,TreeMap,ArrayList,TreeSet,Set
1.线程安全的集合:集合类中,用于实现线程安全的有两种办法,一种是使用Collections.synchronizedList来替代ArrayList
具体的API如下图:
但是该类会出现并发异常:代码如下
package com.example.demo.juc;import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;public class TestCopyOnWriteArrayList {public static void main(String[] args) {ThreadDemo threadDemo = new ThreadDemo();for (int i = 0; i < 10 ; i++) {new Thread(threadDemo).start();}}
}class ThreadDemo implements Runnable{private static List<String> list = Collections.synchronizedList(new ArrayList<>());{list.add("a");list.add("b");list.add("c");}@Overridepublic void run() {Iterator<String> iterator = list.iterator();while (iterator.hasNext()){iterator.next();list.add("aa");}}
}
异常如下:
java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)at java.util.ArrayList$Itr.next(ArrayList.java:859)at com.example.demo.juc.ThreadDemo.run(TestCopyOnWriteArrayList.java:30)at java.lang.Thread.run(Thread.java:748)
使用第二种方式的CopyOnWriteArrayList不存在该问题,写入并复制,这个每写一个就需要去复制一份,如果添加操作就很多,那就不适合使用这个,如果迭代操作多,则选择该实现
package com.example.demo.juc;import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;public class TestCopyOnWriteArrayList {public static void main(String[] args) {ThreadDemo threadDemo = new ThreadDemo();for (int i = 0; i < 10 ; i++) {new Thread(threadDemo).start();}}
}class ThreadDemo implements Runnable{// private static List<String> list = Collections.synchronizedList(new ArrayList<>());private static List<String> list = new CopyOnWriteArrayList<>();{list.add("a");list.add("b");list.add("c");}@Overridepublic void run() {Iterator<String> iterator = list.iterator();while (iterator.hasNext()){iterator.next();list.add("aa");}}
}
2.可以使用如下类来:
ConcurrentHashMap替代HashMap
ConcurrentSkipListMap替代TreeMap
ConcurrentSkipListSet替代TreeSet
CopyOnWriteArrayList替代ArrayList
CopyOnWriteArraySet替代HashSet
线程安全的HashMap,TreeMap,ArrayList,TreeSet,Set相关推荐
- TreeMap与TreeSet(初步了解)
日升时奋斗,日落时自省 目录 一.Map和Set 1.搜索树的基本概念 2.二叉搜索查找 3.二叉搜索树插入 4.二叉搜索树删除 二.TreeMap 三.TreeSet 一.Map和Set Map/S ...
- HashMap,HashTable,TreeMap,HashSet,TreeSet
注意:最好先看一下(三)中 树红黑树的数据结构分析,可以的话数组,链表的数据结构也先复习一下,这里默认你懂数组,链表 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对 ...
- Map,HashMap,TreeMap
1. Map Map接口中,键和值一一映射,可以通过键来获取值. 在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做val ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
- Treemap and Treeset java 实现
引自: http://www.ibm.com/developerworks/cn/java/j-lo-tree/(红黑树部分 详见这里) 对于 TreeMap 而言,它采用一种被称为"红黑 ...
- 非线程安全的HashMap 和 线程安全的ConcurrentHashMap
在平时开发中,我们经常采用HashMap来作为本地缓存的一种实现方式,将一些如系统变量等数据量比较少的参数保存在HashMap中,并将其作为单例类的一个属性.在系统运行中,使用到这些缓存数据,都可以直 ...
- OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
20150506 Created By BaoXinjian 一.摘要 Vector.ArrayList和Hashtable Jashmap的异同 线性表,链表,哈希表是常用的数据结构,在进行Java ...
- HashMap TreeMap专题
刷leetcode的时候,经常性碰到需要使用HashMap或者TreeMap的场景,今天来总结一些它们的用法: TreeMap public class MapCase {public static ...
- 集合源码(一)之hashMap、ArrayList
HashMap 一.HashMap基本概念: HashMap是基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒 ...
最新文章
- 获取应用程序路径信息
- 2015年度互联网安全报告发布 移动支付成重灾区
- LeetCode算法题7:DFS和BFS
- DWZ与KindEditor编辑器的整合
- python加粗_python – 设置为使用标记加粗选定的文本
- 自定义UITableViewCell需注意的问题
- POJ 3051 DFS
- 【STM32】程序下载(ST-LINK V2)
- Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程
- gis计算各省河流长度_用河流和各方解释安全漏洞
- html频谱跳动效果,HTML5音频可视化频谱跳动代码
- Java打造一款SSH客户端,已开源!
- 推荐一个css帮助手册的版本 同时提供chm和在线
- 2018辛苦一年了,程序员这样跟大boss谈2019加薪,谈薪杯具变喜剧
- Linux 开发环境搭建与使用——SlickEdit 简单使用教程
- Apple苹果iOS数据丢失如何恢复?
- 华为VRRP-基于交换机的VRRP配置
- 电路实验一阶电路误差分析_动态电路分析
- Point-Set Topological Spatial Relations 点集拓扑空间关系
- [PPPOE]PPPD源码分析
热门文章
- 数据结构之基于Java的链接列表实现
- freecplus框架-加载参数文件
- mysql数据库在什么程序操作_MySQL数据库基本操作(一)
- WSUS补丁更新相关命令及参数
- Redis学习总结(18)——Redis 常见的使用场景汇总
- 九、Linux的网络配置
- oracle date 隐式转换,PL/SQL中的数据类型隐式转换规则
- CPython 标准库源码分析 collections.Counter
- XenServer 6.5实战系列之十三:图形界面安装Linux Redhat系统
- 《中国人工智能学会通讯》——5.4 结 论