首页 > 其他分享 >纯手写实现concurrenthashmap&原理分析

纯手写实现concurrenthashmap&原理分析

时间:2022-11-07 23:24:08浏览次数:39  
标签:index concurrenthashmap 实现 Hashtable key 原理 手写 smartHashTables bigHashTable

ConcurrentHashMap原理

HashTable与HashMap的区别

  • HashMap线程不安全

  • HashTable线程安全

HashTable集合有哪些缺陷

  • 加了synchronized,多线程操作效率低

![](/Users/pxw/Desktop/截屏2022-10-26 下午9.44.09.png)

ConcurrentHashMap1.7 底层实现

数据结构:数组+Segments分段锁+HashEntry链表实现

锁的实现:Lock锁+CAS乐观锁+UNSAFE类

扩容实现:支持多个Segment同时扩容

![](/Users/pxw/Desktop/截屏2022-10-26 下午9.59.16.png)

纯手写

class hashtable17{
    private Hashtable<String,Object>[] bigHashTable; #大数组
    public hashtable17() {
        Hashtable<String, Object>[]smartHashTables = new Hashtable[16];
        for (int i = 0; i < 16; i++) {
            smartHashTables[i] = new Hashtable<String,Object>(); #16个小数组
        }
        this.bigHashTable = smartHashTables;
    }
    public void put(String key,Object value){
       int index = key.hashCode()%bigHashTable.length;
       bigHashTable[index].put(key,value);
    }
    public Object get(String key){
        int index = key.hashCode()%bigHashTable.length;
        return bigHashTable[index].get(key);
    }
}

ConcurrentHashMap1.8 底层实现

数据结构:Node数组

锁的实现:

  • index没有发生使用cas
  • index发生冲突使用synchronized

扩容机制:

  • 支持并发扩容

标签:index,concurrenthashmap,实现,Hashtable,key,原理,手写,smartHashTables,bigHashTable
From: https://www.cnblogs.com/new228666/p/16867868.html

相关文章