网站seo视频住房城乡建设部网站通报
2026/1/29 7:40:18 网站建设 项目流程
网站seo视频,住房城乡建设部网站通报,wordpress数据库软件,成功备案的网站增加域名concurrentHashMap的是为了解决HashMap在并发环境中出现的线程安全问题#xff0c;同时也优化了HashTable在高并发中存在的性能问题#xff0c;让其性能更接近于HashMap。高并发问题HashMap1.数据丢失问题2.JDK1.7采用头插法#xff0c;会导致链表成环#xff0c;抛出Concu…concurrentHashMap的是为了解决HashMap在并发环境中出现的线程安全问题同时也优化了HashTable在高并发中存在的性能问题让其性能更接近于HashMap。高并发问题HashMap1.数据丢失问题2.JDK1.7采用头插法会导致链表成环抛出ConcurrentModificationException异常HashTable全局使用synchronized锁读写都需要加锁性能差。// Hashtable的解决方案全局锁 public class HashtableK,V { public synchronized V put(K key, V value) { // 全局一把锁所有操作串行化 // 性能极差100个线程要排队 } public synchronized V get(Object key) { // 读操作也要加锁 // 大多数场景下读多写少这是巨大的浪费 } }需要解决的问题concurrentHashMap需要解决如下两个问题保证线程安全的前提下让其读写性能趋近于HashMap所以下文主要探讨它是如何解决这两个问题的。在HashTable的基础上解决全局锁的性能问题让读写性能接近HashMapJDK1.7中的解决方案洞察大多数场景下key的操作其实互补干扰假设决策如果key1和key2在不同的段为什么不让它们并行在该版本中CHMconcurrentHashMap使用分段锁优化该问题将一个HashMap分为16段进行存储在并发操作中需要首先定位到key在哪一段将该段加锁在定位到桶中存储来保证线程安全的同时提升大约16倍的性能。class SegmentK,V extends ReentrantLock { // 每个Segment都是一个完整的HashMap结构 HashEntryK,V[] table; int count; int modCount; int threshold; float loadFactor; }存在的问题1. 内存浪费每一段都是一个完整的HashMap结构16套的元数据2. 不够灵活并发度固定为16不能动态调整3. 访问开销需要两次哈希计算定位Segment 定位桶JDK1.8的解决方案统计数据表明80%的put操作目标同是空的无竞争15%的操作桶中只有一个元素竞争小5%的操作桶中有多个元素需要真正加锁设计决策switch竞争程度case 无竞争用CAS无锁case 低竞争用synchronized轻量级锁case 高竞争转红黑树O(log n)保证所以该版本开始CHM使用CASsynchronized来保证线程安全的同时进一步优化性能。在put操作时当桶为空则使用CAS操作添加节点当桶不为空时则锁住该桶锁头节点保证线程安全。get操作完全无锁至于为什么下期讲吧。源码不分析了看不懂并发编程的三个境界境界1互斥悲观锁// HashTable的做法先锁住再操作 synchronized(this) { } // 思想默认会有竞争所以先加锁境界2乐观锁CAS// AtomicInteger的做法先操作发现冲突再重试 do { oldValue get(); newValue oldValue 1; } while (!compareAndSet(oldValue, newValue)); // 思想默认没竞争有冲突再处理境界3自适应锁CHM的做法// 智能选择策略 if (无竞争) { 用CAS; // 乐观 } else { 用synchronized; // 悲观 }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询