zoukankan      html  css  js  c++  java
  • ConcurrentHashMap

    在三种并发类型中(Concurrent,CopyOnWrite,queue),今天我去看了下ConcurrentHashMap. 众所周知,我们可以在单线程时使用HashMap提高效率,而多线程时用Hashtable来保证安全。 但是hashtable对于同步的设置不是很人性化。通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,安全的背后是巨大的浪费,解决方案----ConcurrentHashMap。 ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁。

    左边便是Hashtable的实现方式---锁整个hash表;而右边则是ConcurrentHashMap的实现方式---锁桶(或段)。ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶。试想,原来只能一个线程进入,现在却能同时16个写线程进入(写线程才需要锁定,而读线程几乎不受限制,之后会提到),并发性的提升是显而易见的。 ConcurrentHashMap中主要实体类就是三个:ConcurrentHashMap(整个Hash表),Segment(桶),HashEntry(节点),对应上面的图可以看出之间的关系。

      这边这个segment里面就是对应一个hashtable!

  • 相关阅读:
    OpenCV/python读取,显示,保存图像
    机器学习的基本分类
    Qt Designer常用部件介绍
    C#数据类型列表
    SQL-Base 函数
    SQl 基本函数
    SQL 插入数据
    SQL-Base 用表组织数据
    SQLserver的基本用法
    C#MyBank(自己的看法,转账有点小问题)
  • 原文地址:https://www.cnblogs.com/clunyes/p/3003713.html
Copyright © 2011-2022 走看看