[关闭]
@pastqing 2018-01-23T19:25:28.000000Z 字数 1210 阅读 1407

java集合框架——ConcurrentHashMap

java java-collection-framwork


ConcurrentHashMap是一个线程安全的hashmap,相比于使用synchronized加锁实现线程安全的HashTable, 前者更加高效。


一、ConcurrentHashMap组成结构(JDK1.7)

ConcurrentHashMap包含两个基本的静态类HashEntrySegmentHashEntry用来存储key-value,Segment用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。

结构图如下:
ConcurrentHashMap.png-7.5kB


1.HashEntry

  1. static final class HashEntry<K,V> {
  2. final int hash;
  3. final K key;
  4. volatile V value;
  5. volatile HashEntry<K,V> next;
  6. HashEntry(int hash, K key, V value, HashEntry<K,V> next) {
  7. this.hash = hash;
  8. this.key = key;
  9. this.value = value;
  10. this.next = next;
  11. }
  12. final void setNext(HashEntry<K,V> n) {
  13. UNSAFE.putOrderedObject(this, nextOffset, n);
  14. }
  15. // Unsafe mechanics
  16. static final sun.misc.Unsafe UNSAFE;
  17. static final long nextOffset;
  18. static {
  19. try {
  20. UNSAFE = sun.misc.Unsafe.getUnsafe();
  21. Class k = HashEntry.class;
  22. nextOffset = UNSAFE.objectFieldOffset
  23. (k.getDeclaredField("next"));
  24. } catch (Exception e) {
  25. throw new Error(e);
  26. }
  27. }
  28. }

2.Segment

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注