zoukankan      html  css  js  c++  java
  • 并发编程(二)------并发类容器ConcurrentMap

    并发类容器:

    • 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 }
  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/yangyang521/p/10178199.html
Copyright © 2011-2022 走看看