我们知道哈希表是一种非常高效的数据结构,设计优良的哈希函数可以使其上的增删改查操作达到O(1)级别。Java为我们提供了一个现成的哈希结构,那就是HashMap类,在前面的文章中我曾经介绍过HashMap类,知道它的所有方法都未进行同步,因此在多线程环境中是不安全的。为此,Java为我们提供了另外一个HashTable类,它对于多线程同步的处理非常简单粗暴,那就是在HashMap的基础上对其所有方法都使用synchronized关键字进行加锁。这种方法虽然简单,但导致了一个问题,那就是在同一时间内只能由一个线程去操作哈希表。即使这些线程都只是进行读操作也必须要排队,这在竞争激烈的多线程环境中极为影响性能。本篇介绍的ConcurrentHashMap就是为了解决这个问题的,它的内部使用分段锁将锁进行细粒度化,从而使得多个线程能够同时操作哈希表,这样极大的提高了性能。下图是其内部结构的示意图。
成都创新互联公司自2013年起,是专业互联网技术服务公司,拥有项目成都网站制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元三沙做网站,已为上家服务,为三沙各地企业和个人服务,联系电话:189808205751. ConcurrentHashMap有哪些成员变量?
//默认初始化容量 static final int DEFAULT_INITIAL_CAPACITY = 16; //默认加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; //默认并发级别 static final int DEFAULT_CONCURRENCY_LEVEL = 16; //集合大容量 static final int MAXIMUM_CAPACITY = 1 << 30; //分段锁的最小数量 static final int MIN_SEGMENT_TABLE_CAPACITY = 2; //分段锁的大数量 static final int MAX_SEGMENTS = 1 << 16; //加锁前的重试次数 static final int RETRIES_BEFORE_LOCK = 2; //分段锁的掩码值 final int segmentMask; //分段锁的移位值 final int segmentShift; //分段锁数组 final Segment[] segments;