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 }
  • 相关阅读:
    W3C标准
    Oracle数据库中的几个名字及监听的配置问题
    Linux中特别要注意用户与文件权限的问题
    Linux中mv重命名作用及打包war压缩文件及分配权限
    虚拟机的ip网络设置的选择
    sqlplus中登陆账户用@加上数据库sid
    bat文件从@含义起
    我原来还在这
    Hibernate的数据操作(4.*以上版本)
    Hibernate中的配置文件
  • 原文地址:https://www.cnblogs.com/yangyang521/p/10178199.html
Copyright © 2011-2022 走看看