并发编程(二)------并发类容器ConcurrentMap
程序员文章站
2024-01-30 11:16:52
并发类容器: jdk5.0以后提供了多种并发类容器来替代同步类容器从而改善性能。 同步类容器的状态都是串行化的。 他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐量。 ConcurrentMap接口下有俩个重要的实现: ConcurrentHashMap Con ......
并发类容器:
- jdk5.0以后提供了多种并发类容器来替代同步类容器从而改善性能。
- 同步类容器的状态都是串行化的。
- 他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐量。
concurrentmap接口下有俩个重要的实现:
- concurrenthashmap
- concurrentskiplistmap(支持并发排序功能)
concurrenthashmap原理:
concurrenthashmap内部使用段(segment)来表示这些不同的部分,每个段其实就是一个小的hashtable,它们有自己的锁。
只要多个修改操作发生在不同的段上,它们就可以并发进行。把一个整体分成了16个段(segment),也就是最高支持16个线程的并发修改操作。
这也是在多线程场景时减小锁的粒度从而降低锁竞争的一种方案。并且代码中大多共享变量使用volatile关键字声明,目的是第一时间获取修改的内容,性能非常好。
1 package com.bfxy.thread.cord.collection; 2 import java.util.map; 3 import java.util.concurrent.concurrenthashmap; 4 5 public class useconcurrentmap { 6 7 public static void main(string[] args) { 8 9 concurrenthashmap<string, object> map = new concurrenthashmap<>(); 10 11 map.put("k1", "v1"); 12 map.put("k2", "v1"); 13 map.put("k1", "vv1"); //如果元素已存在 则覆盖掉 14 map.putifabsent("k1", "vvv1"); //如果元素已存在 则不会put 15 16 for(map.entry<string, object> me : map.entryset()){ 17 system.err.println("key: " + me.getkey() + ", value: " + me.getvalue()); 18 } 19 map.size(); 20 } 21 22 }
推荐阅读
-
并发编程(二)------并发类容器ConcurrentMap
-
(二) 并发容器之 CopyOnWriteArraySet
-
Java并发编程之LockSupport类详解
-
Java并发编程学习之Unsafe类与LockSupport类源码详析
-
Java并发编程学习之Unsafe类与LockSupport类源码详析
-
并发编程(二)—— CountDownLatch、CyclicBarrier和Semaphore
-
Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用
-
Java并发编程之常用的辅助类详解
-
[Java 并发编程实战] 设计线程安全的类的三个方式(含代码)
-
Python3 并发编程之多线程(二)