HashMap是最常用的一种Map,属于非线程安全的Map实现类。好处是效率高,因为不用考虑线程安全,任何时候都是无脑的直接操作。   在web项目中的单线程代码中,使用HashMap是没有问题的,但是一旦涉及到同时会有多个线程访问同一个HashMap时,则会导致程序结果产生偏差。
  我去看了jdk中的HashMap类的源码和注释,总结了一下这种情况如下:
      如果有多个线程同时访问同一个HashMap实例,其中只要有一个线程结构性修改了该HashMap实例,
  该HashMap实例就必须通过外部手段保证其线程安全(结构性修改是指任何对该HashMap实例进
  行的增加或者删除操作。如果只是改变HashMap实例中已存在的key-value元素中的value不算
  结构性操作)。适合的外部手段通常是通过一个线程安全的对象来实现,而且要求这个对象的成员变量
  中包含了Map。
    如果不存在符合该条件的对象的话,那么HashMap应该用Collections类的synchronizedMap方法
 包装一下。最合适的做法是在Map被创建的时候用马上用synchronizedMap方法来包装一下,从而有效避免
   任何非线程安全的意外操作发生,做法如下:
   Map<String,String> unSafeMap = new HashMap<String,String>();
    Map safeMap = Collections.synchronizedMap(unSafeMap);
   然后任何操作都通过实例对象safeMap来进行,从而就不会存在线程冲突导致程序执行结果有误的情况。
												

利用Collections将非线程安全的Map转换成线程安全的Map相关推荐

  1. java 把map转换成json_map转换成JSON的3种方法

    1 json-lib net.sf.json-lib json-lib 2.4 jdk15 import java.util.HashMap; import java.util.Map; import ...

  2. MapStruct Map 转换成对象

    背景 调用公司影像识别服务接口,返回值都是 Map<String,Object>类型,有的key很多.想把这种 map 结果转为项目中对应的JavaBean如DTO 或者 VO,又不想写很 ...

  3. java中把map转换成list

    private String key;     private String value;          //把map转换成list的公共方法     public static List map ...

  4. java非负整数怎么设_使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法...

    使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 一.题目要求 将非负十进制整数n转换成b进制.(其中b=2~16) ...

  5. 将map转换成json字符串

    import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;public class Transfer {p ...

  6. 自动将Map转换成对象的方法

    实现自动将Map转换成对象,借助第三方工具commons-beanutils-1.8.0.jar+commons-logging.jar实现,需要遵守的规则创建的对象的属性名必须与map的key相同. ...

  7. 利用栈的基本操作,将一个十进制数转换成8进制数

    题目 利用栈的基本操作,将一个十进制数转换成8进制数 #include<iostream>using namespace std;#define MAXSIZE 100 typedef i ...

  8. raw服务器镜像文件怎么打开,利用qemu-img工具将其它格式镜像文件转换成VHD或RAW格式的方法...

    利用qemu-img工具将其它格式镜像文件转换成VHD或RAW格式的方法 发布时间:2020-08-26 14:31:49 来源:亿速云 阅读:962 作者:小新 小编给大家分享一下利用qemu-im ...

  9. Java中,通过synchronizedXxx()将线程不安全的集合转换成线程安全的集合

    保证线程安全的方法 synchronizedXxx():该方法可以使指定的集合包装成线程安全的集合,并返回 例如: Collections.synchronizedList(List) 将线程不安全的 ...

最新文章

  1. 让对方ping不通你的主机
  2. :new与:old的用法
  3. iptables基本配置方法
  4. c语言静态成员变量重名会怎么样,C++中静态成员函数与静态成员变量(static )...
  5. c语言dll创建线程,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
  6. CentOS7.4到Elasticsearch一路坑(八)(坑没填上)
  7. Linux系统管理第六周作业【Linux微职位】
  8. 【转】ASP.net2。0中解决无法获取 GridView 隐藏列值问题
  9. 新浪财经三人行:专家谈萨班斯法案聊天实录
  10. windows 无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装在GPT磁盘上
  11. android删除字符,【已解决】Android中EditText中退格键BackSpace键(删除键)不起效果:无法删除字符...
  12. [MATLAB 在科学计算中的应用] 使用MATLAB 进行非线性拟合
  13. Ubuntu 15.10 x64 安装 Android SDK
  14. 叫车难再现,滴滴回应“不加价叫车难”问题
  15. Excel里面输入18位数字,但是显示却是其他的?!请问怎么解决?
  16. 深刻理解Linux进程间通信(IPC)
  17. 2.2 数据管理 之 数据加权
  18. NRF24L01P(nrf24l01+)从入门到使用
  19. 越多的人入局棋牌游戏开发行业,游戏产品突出竞技元素
  20. IBM ServerGuide 8.41

热门文章

  1. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
  2. Win10中控制台程序输出阻塞导致程序卡死
  3. SMC前端开发者自动化测试用例开发指南
  4. form 提交 无法显示该网页 数据量大提交Post too large错误
  5. Objective-C内存管理方式
  6. html用户登录页面设计,简洁时尚的用户登录界面设计效果
  7. springboot自定义参数处理器和返回值处理器
  8. MySQL安装提示配置信息已损坏,请联系技术人员
  9. 原子类型:AtomicLong详解
  10. 【Unity3d学习】粒子光环的制作——粒子编程初体验