我们都知道。HashMap是非线程安全的(非同步的)。那么怎么才能让HashMap变成线程安全的呢?

我认为主要可以通过以下三种方法来实现:

1.替换成Hashtable,Hashtable通过对整个表上锁实现线程安全,因此效率比较低

2.使用Collections类的synchronizedMap方法包装一下。方法如下:

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)  返回由指定映射支持的同步(线程安全的)映射

private static Map<String,List<MaxMinTimeValue>> maxMinTimeValueMap = Collections.synchronizedMap(new LinkedHashMap<String,List<MaxMinTimeValue>>());
private static Map<String,MaxMinTimeValue> maxMinTimeValueMap4Kuashiduan = Collections.synchronizedMap(new LinkedHashMap<String,MaxMinTimeValue>());

3.使用ConcurrentHashMap,它使用分段锁来保证线程安全

通过前两种方式获得的线程安全的HashMap在读写数据的时候会对整个容器上锁,而ConcurrentHashMap并不需要对整个容器上锁,它只需要锁住要修改的部分就行了

java 如何让HashMap变成线程安全的相关推荐

  1. java单例模式和HashMap的线程安全

    单例模式参考http://blog.csdn.net/zercle/article/details/4503355 (该文章参考了http://wmj2003.iteye.com/blog/37951 ...

  2. Java集合:HashMap线程不安全?有哪些表现?

    HashMap是线程不安全的!主要表现在多线程情况下: 1)hash冲突时,put方法不是同步的,先存的值会被后存的值覆盖.(1.7和1.8都有的表现) 2)在resize的时候,可能会导致死循环(环 ...

  3. java hashmap非线程安全

    理解和讨论HashMap的线程安全 (2010-06-22 23:00:42) 转载▼ 标签: cache 杂谈 分类: 技术 原贴地址:http://www.javaeye.com/topic/65 ...

  4. java中为什么Hashtable是线程安全的,而HashMap是线程不安全的?还有ArrayList为什么是线程不安全的,Vector是线程安全的??

    文章目录 一.HashMap解析 二.Hashtable解析 三.Collections.synchronizedMap()解析 四.ConcurrentHashMap 五.ArrayList为什么是 ...

  5. HashMap 为什么线程不安全?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:developer cnblogs.com/develope ...

  6. 都说 HashMap 是线程不安全的,到底体现在哪儿?

    前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密. 1.jdk1.7中的HashMap 在jdk1.8中对HashM ...

  7. 面试 | HashMap 为什么线程不安全?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | cnblogs.com/developer_c ...

  8. 【面试题】你知道为什么HashMap是线程不安全的吗?

    我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密. jdk1.7中的HashMap 在jdk1.8中对HashMap做了很 ...

  9. 【Java基础】HashMap原理详解

    [Java基础]HashMap原理详解 HashMap的实现 1. 数组 2.线性链表 3.红黑树 3.1概述 3.2性质 4.HashMap扩容死锁 5. BATJ一线大厂技术栈 HashMap的实 ...

最新文章

  1. java.io.file jar_IDEA Maven 打包运行 jar java.io.FileNotFoundException: 问题?
  2. Python基础入门之解释器安装
  3. 深度学习笔记 第五门课 序列模型 第二周 自然语言处理与词嵌入
  4. tensorflow lstm从隐状态到预测值_机器学习100天-Day2405 循环神经网络RNN(LSTM)
  5. [转]数据结构KMP算法配图详解(超详细)
  6. 今天rpm装glibc和glibc-common版本,出现二个包相互依赖,解决办法
  7. 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
  8. 第五章 PYTHON标准库
  9. 疯癫的我到了巅峰 -- 我的成人礼
  10. QT之qss教程- QScrollBar
  11. windows命令字典(收藏)
  12. 自动化提升系列:在白色背景上拍摄白色产品
  13. Windows10系统安装postgreSQL出错解决方法
  14. 从npm、npx说起,到shell
  15. 解决win10开机内存过高的办法(亲测有效)
  16. java微信小程序、APP 西门子PLC通信,java S7-S200、java S7-300、java S7-400,java与PROFINET协议通信 Java与西门子PLC通信
  17. python批量整理地籍项目的文件夹
  18. Python 实验题目:字符串格式化输出内容为:姓名:张三,学号:1101,张三的平均分为90.65分。(平均分的原始值为:90.6497)
  19. Map List的拼接实现输出整个学期的成绩单
  20. Android单独的服务App,值得推荐的 4 款独立开发者 APP

热门文章

  1. 微信后端服务架构及其过载控制系统DAGOR
  2. 第三篇 用户和权限
  3. Windows10 JDK9安装及配置环境变量与Eclipse安装
  4. Ubuntu 16.04开机自动开启数字键盘NumLock
  5. CentOS 7.2 安装教程
  6. Hibernate 性能优化技巧
  7. Cannot change version of project facet Dynamic Web Module to 2.5 问题的解决方法
  8. python 异或加密字符串
  9. linux ubuntu 系统日志信息
  10. linux日志系统分析:rsyslog、syslog、klog