利用Collections将非线程安全的Map转换成线程安全的Map
来源:互联网 发布:佛山各区签约大数据 编辑:程序博客网 时间:2024/05/16 18:51
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来进行,从而就不会存在线程冲突导致程序执行结果有误的情况。
阅读全文
0 0
- 利用Collections将非线程安全的Map转换成线程安全的Map
- Map的线程安全实现
- stl map非线程安全
- Map 非线程安全的证明 以及线程安全方案(Concurrent)
- 线程安全的的map-CSuperMap
- 一个线程安全的std::map封装
- 如何实现一个线程安全的map?
- System.Collections的线程安全
- 线程安全的Collections.synchronizedList
- Map线程安全
- Map线程安全
- java--map--线程安全
- 线程安全非线程安全的区别
- java8中将非线程安全类采用lamda表达式转换成线程安全类的方式
- Map的线程安全与否的相关文章
- 非线程安全的函数
- c++ 中 设计一个线程安全的map
- Map集合类中保证线程安全的策略比较
- maven 添加自己下载的jar包到本地仓库
- LeetCode第2题
- Docker CE 镜像源站
- Springboot教程三——常用注释
- yolo 搭建安装过程
- 利用Collections将非线程安全的Map转换成线程安全的Map
- RecyclerView 条目点击事件 XRecyclerView刷新加载
- 数据库索引优化
- Sublime自动补齐括号后如何快速跳出
- CentOS服务器安装部署Java环境(jdk,tomcat)
- Http协议
- 《Java编程技巧1001条》第366条 纪元日是什么
- QT接口
- python 生成满二叉树并进行深度优先搜索和宽度优先搜索