java中concurrenthashmap学习-编程开发技术

java中concurrenthashmap学习-编程开发技术

ID:30769169

大小:121.67 KB

页数:5页

时间:2019-01-03

java中concurrenthashmap学习-编程开发技术_第1页
java中concurrenthashmap学习-编程开发技术_第2页
java中concurrenthashmap学习-编程开发技术_第3页
java中concurrenthashmap学习-编程开发技术_第4页
java中concurrenthashmap学习-编程开发技术_第5页
资源描述:

《java中concurrenthashmap学习-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java中ConcurrcntHashMap学习-编程开发技术Java中ConcurrentHashMap学习原文出处:imzoerConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtablc是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况卜效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的止确性。但是hashtable毎次同步执行的时候都要锁住整个结构。看下图:HashTableConcurrentHashMap7:StMtt*图左侧清晰的标注岀来,lock每次都要锁住整个结构。ConcurrentHa

2、shMap正是为了解决这个问题而诞牛的。ConcurrentHashMap锁的方式是稍微细粒度的。?ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶。试想,原来只能一个线程进入,现在却能同时16个写线程进入(写线程才需要锁定,而读线程儿乎不受限制,Z后会提到),并发性的提升是显而易见的。更令人惊讶的是ConcurrentHashMap的读取并发,因为在读取的大多数时候都没有用到锁定,所以读取操作儿乎是完全的并发操作,而写操作锁定的粒度乂非常细,比起之前又更加快速(这一点在桶更多吋表现得更明显些)。只有在求s

3、ize等操作时才需要锁定整个表。而在迭代时,ConcurrentHashMap使用了不同于传统集合的快速失败迭代器的另一种迭代方式,我们称为弱一致迭代器。在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛岀ConcurrentModificationException,取而代Z的是在改变时new新的数据从而不影响原有的数据‘iterator完成后再将头指针替换为新的数据,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变,更重要的,这保证了多个线程并发执行的连续性和扩展性,是性能提升的关键。卜而分析ConcurrentHashMap的源码。主要是分

4、析英屮的Segmento因为操作基本上都是在Segment±的。先看Segment内部数据的定义。staticfinalclassSegir.entextendsReentrantLockimplementsSerializable{privatestaticfinallongserialVersionUID=2249069246763132397L;volatiletransientintcount;transientintrcodCount;transientintthreshold;volatiletransientConcurrentHashldap.HashEntry<

5、KfV>[]table;finalfloatloadFactor;从上图可以看岀,很重要的一个是tab1e变量。是一个HashEntry的数纽LoSegment就是把数据存放在这个数组中的。除了这个量,还有诸如loadfactor>modcount等变量。看segment的get?函数的实现:Vget(Objectparair.Objectrintpararclnt){if(this.count!=0){ConcurrentHashl-Iap.HashEntrylocalHashEntry=getFirst(pararr.Int);while(localHashEntry!=null){i

6、f((localHashEntry.hash==paraiclnt)&&(paiHantO匕匸•Eqa且丄s(丄ocalHaishEii匸ry.kObjectlocalObject=localHashEntry.value;if(localObject!=null)returnlocalObject;returnreadValueUnderLock(localHa3hEntry);}localHashEntry=localHashEntry.next;}returnnull;加上hashentry的代码:staticfinalclassHash.EntrysfinalKkey;f

7、inalinthash;volatileVvalue;parair.V)finalHashEntrynext;HashEntry(KparairZ^intpararrJntHashEntryparair2iashEntryf{this.key=parairZ;this.hash=parairJnt;th=parairJiashEntry;this.value=parairiV;}号taticfinal

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。