java的ConCurrentHashMap

Java87

一般的应用的编程,用到ConCurrentHashMap的机会很少,就象大家调侃的一样:只有面试的时候才用得着。

但还是有。

网上关于这个的资料,多如牛毛,大部分是原理分析和简单例子。

原理的核心就一个:并发Map其实是多个HashTable拼凑的,可以在写的时候具有更小的锁粒度,它适用于读多写少的场景。其它细枝末节有空再关注了。知道这个就足够了。

不过许多文章并没有讨论的使用的注意事项:如何在并发的情况下,正确修改某个key。

我们举一个最简单的例子,一个map有两个key,分别是a和b,有10来个线程分别修改a,b。线程的作用就是把a,b的值取出+1。

最后要求,运行一段时间后,a,b的值应该是它们分别被操作的次数。

在开始前,重申下:并发map只有部分操作是上锁的,并非说所有的操作都会上锁;特别map有上锁操作,并不意味着其它关联代码都上锁。

如果要了解哪些是上锁的,请查看源码,现在eclipse查看源码简直不要太方便。

来个例子:

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长