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相关推荐

  1. TreeMap与TreeSet(初步了解)

    日升时奋斗,日落时自省 目录 一.Map和Set 1.搜索树的基本概念 2.二叉搜索查找 3.二叉搜索树插入 4.二叉搜索树删除 二.TreeMap 三.TreeSet 一.Map和Set Map/S ...

  2. HashMap,HashTable,TreeMap,HashSet,TreeSet

    注意:最好先看一下(三)中 树红黑树的数据结构分析,可以的话数组,链表的数据结构也先复习一下,这里默认你懂数组,链表 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对 ...

  3. Map,HashMap,TreeMap

    1. Map Map接口中,键和值一一映射,可以通过键来获取值. 在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做val ...

  4. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

  5. Treemap and Treeset java 实现

    引自:  http://www.ibm.com/developerworks/cn/java/j-lo-tree/(红黑树部分 详见这里) 对于 TreeMap 而言,它采用一种被称为"红黑 ...

  6. 非线程安全的HashMap 和 线程安全的ConcurrentHashMap

    在平时开发中,我们经常采用HashMap来作为本地缓存的一种实现方式,将一些如系统变量等数据量比较少的参数保存在HashMap中,并将其作为单例类的一个属性.在系统运行中,使用到这些缓存数据,都可以直 ...

  7. OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)

    20150506 Created By BaoXinjian 一.摘要 Vector.ArrayList和Hashtable Jashmap的异同 线性表,链表,哈希表是常用的数据结构,在进行Java ...

  8. HashMap TreeMap专题

    刷leetcode的时候,经常性碰到需要使用HashMap或者TreeMap的场景,今天来总结一些它们的用法: TreeMap public class MapCase {public static ...

  9. 集合源码(一)之hashMap、ArrayList

    HashMap 一.HashMap基本概念: HashMap是基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒 ...

最新文章

  1. 获取应用程序路径信息
  2. 2015年度互联网安全报告发布 移动支付成重灾区
  3. LeetCode算法题7:DFS和BFS
  4. DWZ与KindEditor编辑器的整合
  5. python加粗_python – 设置为使用标记加粗选定的文本
  6. 自定义UITableViewCell需注意的问题
  7. POJ 3051 DFS
  8. 【STM32】程序下载(ST-LINK V2)
  9. Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程
  10. gis计算各省河流长度_用河流和各方解释安全漏洞
  11. html频谱跳动效果,HTML5音频可视化频谱跳动代码
  12. Java打造一款SSH客户端,已开源!
  13. 推荐一个css帮助手册的版本 同时提供chm和在线
  14. 2018辛苦一年了,程序员这样跟大boss谈2019加薪,谈薪杯具变喜剧
  15. Linux 开发环境搭建与使用——SlickEdit 简单使用教程
  16. Apple苹果iOS数据丢失如何恢复?
  17. 华为VRRP-基于交换机的VRRP配置
  18. 电路实验一阶电路误差分析_动态电路分析
  19. Point-Set Topological Spatial Relations 点集拓扑空间关系
  20. [PPPOE]PPPD源码分析

热门文章

  1. 数据结构之基于Java的链接列表实现
  2. freecplus框架-加载参数文件
  3. mysql数据库在什么程序操作_MySQL数据库基本操作(一)
  4. WSUS补丁更新相关命令及参数
  5. Redis学习总结(18)——Redis 常见的使用场景汇总
  6. 九、Linux的网络配置
  7. oracle date 隐式转换,PL/SQL中的数据类型隐式转换规则
  8. CPython 标准库源码分析 collections.Counter
  9. XenServer 6.5实战系列之十三:图形界面安装Linux Redhat系统
  10. 《中国人工智能学会通讯》——5.4 结 论