轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2014-06-12 10:10:57.000|閱讀 740 次
概述:本文總結(jié)了Java 8在并發(fā)工具方面的一些改變和加強(qiáng)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
Java 8在Lambda表達(dá)式、接口默認(rèn)方式、新的日期API等方面引入的新特性廣受關(guān)注,同時(shí)在并發(fā)編程方面也做出了大量改進(jìn)。以往的幾個(gè)Java版本都對(duì)java.util.concurrent做了不同程度的增強(qiáng),比如Java 7的Fork/Join框架,而Java 8則進(jìn)一步在java.util.concurrent下增加了新的接口、類(lèi)與方法。目前已經(jīng)更新,變更部分總結(jié)如下:
新的類(lèi)以及接口
java.util.concurrent 中增加了兩個(gè)接口四個(gè)類(lèi):
1.CompletableFuture.AsynchronousCompletionTask接口:標(biāo)識(shí)在async方法中執(zhí)行的異步任務(wù)。
2.CompletionStage<T>接口:異步計(jì)算中可能出現(xiàn)的一個(gè)階段,也就是說(shuō)當(dāng)一個(gè)CompletionStage 完成時(shí)執(zhí)行的動(dòng)作或計(jì)算。
3.CompletableFuture<T>類(lèi):一個(gè)可以確定完成狀態(tài)的Future。
4.ConcurrentHashMap.KeySetView<K,V>類(lèi):ConcurrentHashMap 的鍵的集合視圖。
5.CountedCompleter<T>類(lèi):一個(gè)在沒(méi)有其他action等待的情況下,會(huì)執(zhí)行一個(gè)完成action的 ForkJoinTask 。
6.CompletionException類(lèi):異常類(lèi)。
ConcurrentHashMap增加新方法
在Java 8中,集合框架基于streams和Lambda表達(dá)式做了全新調(diào)整:
ConcurrentHashMap增加了30多個(gè)方法,包括foreach系列(forEach,forEachKey, forEachValue, forEachEntry)、search系列(search, searchKeys, searchValues, searchEntries)、reduce系列(reduce, reduceToDouble, reduceToLong)以及mappingCount 、newKeySet等方法, 增強(qiáng)后的ConcurrentHashMap更適合做緩存了。
java.util.concurrent.atomic包的改進(jìn)
java.util.concurrent.atomic包中增加了四個(gè)新的類(lèi):DoubleAccumulator、DoubleAdder、LongAccumulator、 LongAdder,這四個(gè)類(lèi)的作者是并發(fā)大師Doug lea。
原有的Atomic系列類(lèi)通過(guò)CAS來(lái)保證并發(fā)時(shí)操作的原子性,但是高并發(fā)也就意味著CAS的失敗次數(shù)會(huì)增多,失敗次數(shù)的增多會(huì)引起更多線(xiàn)程的重試,最后導(dǎo)致AtomicLong的效率降低。新的四個(gè)類(lèi)通過(guò)減少并發(fā),將單一value的更新壓力分擔(dān)到多個(gè)value中去,降低單個(gè)value的“熱度”以提高高并發(fā)情況下的吞吐量,京東的劉錕洋詳細(xì),另外minddotout的博主在早些時(shí)候?qū)Γ覀儚慕Y(jié)果中也可以直觀的看到 LongAdder的強(qiáng)大。
ForkJoinPool中增加新方法
Java 8除了對(duì)Fork-Join框架做了優(yōu)化外,也為ForkJoinPool增加了兩個(gè)靜態(tài)方法:getCommonPoolParallelism() 、commonPool(),Oleg Shelajev在這篇博文中并做了測(cè)試以比較其在JDK7、JDK8中的性能。
增加StampedLock類(lèi)
StampedLock是一種新型鎖的實(shí)現(xiàn),很可能在大多數(shù)場(chǎng)景都可以替代ReentrantReadWriteLock。它為讀寫(xiě)操作提供了三種模式:Writing、ReadingOptimistic、 Reading。
有關(guān)Java 8并發(fā)編程方面特性的詳細(xì)介紹可從獲取。
原文://tech.it168.com/a2014/0421/1615/000001615329.shtml
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)