并发类容器:

  • jdk5.0以后提供了多种并发类容器来替代同步类容器从而改善性能。
  • 同步类容器的状态都是串行化的。
  • 他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐量。

ConcurrentMap接口下有俩个重要的实现:

  • ConcurrentHashMap
  • ConcurrentSkipListMap(支持并发排序功能)

ConcurrentHashMap原理:

ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,它们有自己的锁。
只要多个修改操作发生在不同的段上,它们就可以并发进行。把一个整体分成了16个段(Segment),也就是最高支持16个线程的并发修改操作。
这也是在多线程场景时减小锁的粒度从而降低锁竞争的一种方案。并且代码中大多共享变量使用volatile关键字声明,目的是第一时间获取修改的内容,性能非常好。

 package com.bfxy.thread.cord.collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; public class UseConcurrentMap { public static void main(String[] args) { ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(); map.put("k1", "v1");
map.put("k2", "v1");
map.put("k1", "vv1"); //如果元素已存在 则覆盖掉
map.putIfAbsent("k1", "vvv1"); //如果元素已存在 则不会put for(Map.Entry<String, Object> me : map.entrySet()){
System.err.println("key: " + me.getKey() + ", value: " + me.getValue());
}
map.size();
} }

最新文章

  1. C语言中qsort函数用法
  2. 迟来的Android的Camera开发总结
  3. Atitit .html5刮刮卡的gui实现总结
  4. Redis系列(三)—— 订阅/发布
  5. table表格
  6. ionic ngcordova map 地圖
  7. 服务端发送xml请求java代码示例
  8. 【DFS,双向】NYOJ-20-吝啬的国度
  9. jq 图片裁剪
  10. jQuery $.ajaxSend()
  11. C#获取键盘和鼠标操作的时间的类
  12. Swift 算法实战之路:栈和队列
  13. OWA 无法连接到Exchange
  14. 20175221 2018-2019-2 《Java程序设计》第一周学习总结
  15. linux常用命令 wc统计命令
  16. 通过批处理进行Windows服务的安装/卸载&amp;启动/停止
  17. react中使用antd Table组件滚动加载数据的实现
  18. Elasticsearch基本用法(1)--原生操作
  19. go bytes缓冲区使用介绍 -转自https://www.cnblogs.com/--xiaoyao--/p/5122138.html
  20. Action&lt;T&gt; Delegate

热门文章

  1. Dinic算法----最大流常用算法之一
  2. 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
  3. 理解position:relative
  4. js 控制页面跳转的5种方法
  5. Canvas中的剪切clip()方法
  6. Python爬虫框架Scrapy教程(1)—入门
  7. Linked List Cycle 判断一个链表是否存在回路(循环)
  8. JavaScript运算符优先级引起的bug
  9. 记作为前端开发人员跑去面试C#.NET
  10. IIS7 使用server farms 进行负载均衡