ConcurrentHashMap 和 Collections.synchronizedMap(map) 比较

如果你有一个 Map 将会被几个线程同时修改, 那么在Java API 中 你有三种不同的同步 Map 实现可以选择:

  • Hashtable

  • Collections.synchronizedMap(map)

  • ConcurrentHashMap

选择多了也是一种困扰:) 首先,你可以抛开 Hashtable 了,这是一个旧的实现(继承自废弃的 Dictioanry 类),当它被用于 synchronized 时,会有严重的扩展性危机,现在已经不鼓励在新的项目中使用它了。

下面讨论剩下的两种。根据需求, ConcurrentHashMap 更适合。它允许在不 阻塞线程 (block threads)的情况下,几个线程同时修改Map。

Collections.synchronizedMap(map) 创建一个阻塞Map (blocking map), 这会降低map性能。如果需要确保数据的 一致性,使得每个线程都有Map 的即时视图,那么可以使用它。

“Use the first if performance is critical, and each thread only inserts data to the map, with read happening less frequently. Use teh seconc option if you need to ensure data consistency, and each thread needs to hava an  up-to-date view of the map.”

转载于:https://www.cnblogs.com/lcj011/archive/2012/11/07/2758940.html

ConcurrentHashMap 和 Collections.synchronizedMap(map) 比较相关推荐

  1. ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么?

    ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么? 我有一个会被多个线程同时修改的Map 在Java的API里面,有3种不同的实现了同步 ...

  2. Java之通过Collections.synchronizedMap创建线程安全的HashMap

    1 问题 我们知道hashMap线程是不安全的,一般而言,我们怎么创建线程安全的HashMap呢? 2 解决办法 我们可以使用Collections.synchronizedMap来创建HashMap ...

  3. java hashtable 并发_Java 并发容器 —— Hashtable 与 Collections.synchronizedMap(HashMap) 的区别...

    Hashtable 部分源码 以 Hashtable 的 put 方法为例: Hashtable 保证线程安全的方式在 方法前加上 synchronized 关键字(锁的是类的实例) Collecti ...

  4. Java SE基础知识详解第[12]期—集合(Set、Collections、Map、集合嵌套)

    写在前面: 每一个不曾起舞的日子,都是对生命的辜负. 希望看到这里的每一个人都能努力学习,不负韶华,成就更好的自己. 以下仅是个人学习过程中的一些想法与感悟,Java知识博大精深,作为初学者,个人能力 ...

  5. java map同步访问_同步 - Java synchronized块与Collections.synchronizedMap

    您的代码中可能存在细微的错误. [更新:因为他正在使用map.remove(),所以这种描述并不完全有效. 我第一次错过了这个事实. :(感谢问题的作者指出这一点.我将其余部分保留原样,但改变了主要声 ...

  6. 集合(Set、Collections、Map、集合嵌套)

    目录 Set系列集合 Set系列集合概述 HashSet元素无序的底层原理:哈希表 HashSet元素去重复的底层原理 实现类:LinkedHashSet 实现类:TreeSet Collection ...

  7. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  8. Java源码详解六:ConcurrentHashMap源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 数据的存储 构造函数 哈希 put get 扩容 本系列是Java详解,专栏地址:Java源码分析 ConcurrentHashMap 官方文档:ConcurrentH ...

  9. Java常见面试题(持续更新)

    文章目录 transient 关键字作用 final 关键字作用 封装的作用 HashMap,HashTable,ConcurrentHashMap HashMap不是线程安全的示例 HashMap常 ...

最新文章

  1. Linux操作oracle——关闭、停止、重启
  2. 剑指offer-链表中倒数第K个结点
  3. ibmmq 通道命令_IBM MQ 使用指南
  4. mysql延迟注入br_(原创)安全狗SQL注入绕过思路[sql注入waf绕过][sql注入bypass]
  5. getActionBar()报空指针异常
  6. ArrayList理解(1)初始化
  7. javascript获取Select下拉框的值
  8. [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突。
  9. SuperSocket架构设计示意图【转】
  10. 重构:改善既有代码的设计 精彩书评二
  11. vim中:x和:wq的区别
  12. 什么职业的人适合考PMP?(含PMP资料)
  13. matlab官网上的命令,MatLab 2018a 官方教程
  14. JAVAJSP校园宿舍报修系统JSP宿舍管理系统JSP宿舍报修管理系统JSP学生公寓管理系统
  15. 2020中兴捧月-傅里叶-丰收祭赛题常规解法
  16. 整数规划之分支定界法
  17. centos配置linuxptp
  18. Ubuntu 16.04下安装配置Trac项目管理工具
  19. android模拟遥控器home点击
  20. 我的世界java版怎么用结构方块_我的世界结构方块指令(获取结构方块和 使用方法)...

热门文章

  1. java序列化原理_Java序列化机制和原理
  2. self计算机语言,python中self在函数中如何使用
  3. 建筑与计算机技术,计算机技术与建筑设计的不完全认识
  4. python 点云配准,python点云滤波 点云配准用python怎
  5. java中怎么打开标尺_PageOffice如何显示/隐藏Word文档中的标尺
  6. 为什么ES模块比CommonJS更好?
  7. java6 3_那些年,一起学的Java 6-3
  8. mysql提取前两个数据_各种数据库提取表的前几条记录的方法
  9. pcie总线连接两台电脑_基于PCIE总线多主互连系统的设计与实现
  10. 全站仪坐标计算机公式,全站仪使用方法及坐标计算讲解