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