Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • JAVA基础

  • 集合容器

    • HashMap
    • ConcurrentHashMap
      • 1.ConcurrentHashMap对比
      • 2.JDK7与8的区别
      • 3.computeIfAbsen
  • Netty

  • JVM

  • JUC

  • Java
  • 集合容器
phan
2023-05-15
目录

ConcurrentHashMap

# ConcurrentHashMap

# 1.ConcurrentHashMap对比

HashMap多线程环境下不安全;而HashTable通过synchronized保证线程安全,但是它的锁粒度比较大,是一个全表锁,因此效率会比较低。

两者区别在于①继承父类不同②HashMap扩容时是原来的两倍;而HashTable扩容时容量变为原来的两倍加一。③HashMap解决冲突时节点数量小于8则用链表解决,大于等于8则用红黑树进行存储,小于6时由转化为链表存储;而HashTable解决冲突都是以链表方式进行存储。

# 2.JDK7与8的区别

ConcurrentHashMap在JDK1.7下使用的是分段锁机制,一个ConcurrentHashMap下维护一个segment数组,每个segment下都有一个HashMap链表并继承ReentrantLock可重入锁。写操作put()时只需要锁住当前Segment不会影响到其它的段,而对于读操作get()则不需要加锁,因为具体的值都是使用volatile来修饰的。缺点在于定位一个数据需要两次hash,第一次先找到该数据所在的Segment,然后再定位在链表中的位置。

而JDK1.8下则是使用跟HashMap一样的数据结构,维护一个Node数据,冲突时根据该节点长度来扩展为链表或者是红黑树。控制并发的方式是使用synchronized+CAS,这里sychronized不同于HashTable,它只锁住Node节点链表头,只要没有Node节点哈希冲突就不会产生并发问题。

# 3.computeIfAbsen

computeIfAbsen方法用于获取key对应value,同时合并首次获取不到执行key插入的操作。

String[] map = concurrentHashMap.computeIfAbsent(strategyId, key -> new String[RATE_TUPLE_LENGTH]);
1
编辑 (opens new window)
#JAVA基础
上次更新: 2023/12/15, 15:49:57
HashMap
IO模型

← HashMap IO模型→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式