JAVA集合类: java.util包下的HashSet和HashMap类不是线程安全的, java.util.concurrent包下的ConcurrentHashMap类是线程安全的。 写2个测试类来验证下: package com.cdfive.learn.thread; import jav ...
分类:
编程语言 时间:
2019-02-12 00:30:25
阅读次数:
227
数据结构 jdk1.8:数组、链表/红黑树,同HashMap(jdk1.7 分段数组+链表) 线程安全的实现 jdk1.7,分段锁,每次只锁住一个分段,不同分段的数据可以并发修改,提高了并发访问率 jdk1.8,synchronized+CAS,对链表/红黑树的首节点加锁,只要hash不一样就不会冲 ...
分类:
其他好文 时间:
2019-02-09 20:51:20
阅读次数:
171
1.ConcurrentHashmap简介 在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发 ...
分类:
其他好文 时间:
2019-02-08 20:15:40
阅读次数:
152
参考这篇文章 hashtable和hashmap几乎一样,不同之处在:线程安全和速度! hashtable是同步的,在多线程中使用同步的方式访问,而hashmap则不能同步; 所以在使用时如果是在多个线程中使用则使用hashtable,或者使用Java 5提供的ConcurrentHashMap,这 ...
分类:
其他好文 时间:
2019-02-07 23:33:14
阅读次数:
177
之前介绍了Java并发的基础知识和使用案例分析,接下来我们正式地进入Java并发的源码分析阶段,本文作为源码分析地开篇,源码参考JDK1.8 OverView: JDK1.8源码中的注释提到:ConcurrentHashMap是一种提供完整的并发检索和对于并发更新有高预测性的散列表,遵循了与Hash ...
分类:
编程语言 时间:
2019-01-31 13:15:40
阅读次数:
183
java1.8中的ConcurrentHashMap做了非常大的改动,整个数据结构都发生了变化,已经不存在segment了。所以要好好重新查看下源码。这篇博客是逐步更行的,看一点写一点。 首先看一个很重要的参数sizeCtl,这是一个volatile变量,从名字就可以看出,这是一个大小控制参数。这个 ...
分类:
编程语言 时间:
2019-01-27 21:29:56
阅读次数:
354
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同 ...
分类:
编程语言 时间:
2019-01-27 19:01:30
阅读次数:
150
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同 ...
分类:
其他好文 时间:
2019-01-25 19:17:27
阅读次数:
167
ConcurrentHashMap和Hashtable都是线程安全的K-V型容器。本篇从源码入手,简要说明它们两者的实现原理和区别。 与HashMap类似,ConcurrentHashMap底层也是以数组+链表+红黑树实现的,以Node节点封装K-V和hash。 val和next以volatile关 ...
分类:
其他好文 时间:
2019-01-21 21:42:00
阅读次数:
226
CountDownLatch简介 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存 在于java.util.concurrent包下。Coun ...
分类:
编程语言 时间:
2019-01-15 17:11:22
阅读次数:
129