多线程环境使用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.线程安全集合相关推荐

  1. [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ...

    [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ... 摘要 介绍 Java 并发包里的几个主要 ExecutorService . 正文 ...

  2. Java 并发编程——Executor框架和线程池原理

    Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...

  3. [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...

    [Java并发编程(二)] 线程池 FixedThreadPool.CachedThreadPool.ForkJoinPool?为后台任务选择合适的 Java executors ... 摘要 Jav ...

  4. Java并发编程|第二篇:线程生命周期

    文章目录 系列文章 1.线程的状态 2.线程生命周期 3.状态测试代码 4.线程终止 4.1 线程执行完成 4.2 interrupt 5.线程复位 5.1interrupted 5.2抛出异常 6. ...

  5. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

  6. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    转载自  java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...

  7. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  8. Java并发编程:进程和线程之由来

    2019独角兽企业重金招聘Python工程师标准>>> Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编 ...

  9. Java并发编程(08):Executor线程池框架

    本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...

  10. Java并发编程(8)——常见的线程安全问题

    线程安全问题: 多个线程同时执行也能工作的代码就是线程安全的代码 如果一段代码可以保证多个线程访问的时候正确操作共享数据,那么它是线程安全的. 具体说明: java并发线程实战(1) 线程安全和机制原 ...

最新文章

  1. mooc python_MOOC python笔记(一):python语言概述
  2. 接力黄琨儿同志的《给玩命工作却对现状不满的IT人》
  3. book: Effective Java
  4. 去除残缺条目java_为什么说Java匿名内部类是残缺的闭包
  5. 禁用oracle的默认账户,Oracle EBS默认的账户
  6. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
  7. CURL+preg_match()
  8. 无法更改硬件兼容性时解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”的方法
  9. Golang 信息采集
  10. win7计算机资源管理器卡住,Win7电脑资源管理器一直卡住怎么办_Win7电脑资源管理器一直卡住的解决方法 - 系统家园...
  11. 分析码农骄傲自大的几点原因
  12. 【2018-CCPC青岛网赛】 HDU - 6441 Find Integer
  13. (附源码)springboot工单管理系统 毕业设计 964158
  14. Centos 7 部署suricata流量检测
  15. AbsoluteLayout
  16. 人脸识别道闸你不知道的那些事
  17. !外贸邮件处理经验谈
  18. cc双聚类 matlab,mtba 双聚类matlab工具箱,包含各种主要的 算法:cc、floc、opsm、bimax、b LAS等 256万源代码下载- www.pudn.com...
  19. 近期企业财报 | 蔡司、埃森哲、尚德教育、卡塔尔国民银行发布业绩
  20. 惠普磁带备份机支持备份几台服务器,惠普助力广东医学院附属医院信息化

热门文章

  1. 云桌面部署_互助法院部署“云桌面”助力网上办案
  2. 数值孔径NA、分辨率极限与衍射极限(转)
  3. 中国危废处理行业投资策略分析及投资趋势展望报告2022-2028年版
  4. ruoyi springclound开发笔记
  5. ESDB论文重点整理
  6. Linux 如何给予普通用户使用管理员权限操作
  7. 用户留存率问题计算详解
  8. 计算机毕设之化妆品管理系统
  9. 2021(SSL) 自监督学习最新力作:Barlow Twins: Self-Supervised Learning via Redundancy Reduction
  10. Hadoop启动命令