《并发编程》--15.线程安全的HashMap
来源:互联网 发布:每日推荐软件 编辑:程序博客网 时间:2024/04/23 16:41
众所周知,HashMap是线程不安全的。但是如果需要一个线程按钮的HashMap我们需要怎么做的。
这个包装的HashMap可以满足线程安全的要求。但是,他在高并发的环境中性能表现的不好,无论是对Map的读取或者写入,都需要获得munex的锁,这会导致其他的的线程进入等待的状态。如果并发级别不高,一般也够用。但是在高并发的环境中,我们必须寻求新的解决方案。
一个更加专业的HashMap就是ConcurrentHashMap,他专门为并发进行了优化。
其中一个可行的办法就是Collections.synchronizedMap。如下代码就是线程安全的HashMap
public static Map m = Collections.synchronizedMap(new HashMap<>());说白了,就是给HashMap加锁,jdk参考代码如下
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<>(m); } /** * @serial include */ private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable { private static final long serialVersionUID = 1978198479659022715L; private final Map<K,V> m; // Backing Map final Object mutex; // Object on which to synchronize SynchronizedMap(Map<K,V> m) { this.m = Objects.requireNonNull(m); mutex = this; }}
这个包装的HashMap可以满足线程安全的要求。但是,他在高并发的环境中性能表现的不好,无论是对Map的读取或者写入,都需要获得munex的锁,这会导致其他的的线程进入等待的状态。如果并发级别不高,一般也够用。但是在高并发的环境中,我们必须寻求新的解决方案。
一个更加专业的HashMap就是ConcurrentHashMap,他专门为并发进行了优化。
有关ConcurrentHashMap的实现细节,可以参考下面锁的优化。
阅读全文
0 0
- 《并发编程》--15.线程安全的HashMap
- ConcurrentHashMap 高并发、高吞吐量的线程安全HashMap实现
- 【java并发】造成HashMap非线程安全的原因
- 并发(十五):怎么证明Hashmap不是线程安全的?
- 并发编程の线程安全
- ConcurrentHashMap 线程安全的 HashMap
- ConcurrentHashMap -- 线程安全的hashmap
- Java并发编程 之 HashMap线程不安全
- Java并发编程4.1-设计线程安全的类
- Java并发编程-33-线程安全的可遍历映射
- JAVA并发编程(三)设计线程安全的类
- Java并发编程规则:构建线程安全的共享对象
- Java并发编程规则:设计线程安全的类
- Java并发编程的艺术(十二)——线程安全
- Java并发编程(二)--java线程安全的一些基础
- 《并发编程》--21.无锁的线程安全整数 AtomicInteger
- 【Java并发编程实践】— 线程安全
- 【Java并发编程一】线程安全
- linux路由route 命令
- 浅议P2P平台内部用户间债权转让功能设计
- 在 Ubuntu16.04 上安装 LaTeX
- pt-table-check和pt-table-sync实践
- 情人节动画笔记
- 《并发编程》--15.线程安全的HashMap
- 表分区
- CDC派生类封装的GDI函数及功能说明
- list_entry()详解
- laravel查询数据库,对反馈回来的object类型,判断是否存在数据
- 欢迎使用CSDN-markdown编辑器
- 在日常工作中,认清最重要的事(笔记)
- 比特币 钱包这里唯一技术的体现就是冷钱包
- SpringCloud: 服务消费者(Feign)