2014-06-30 83 views
3

ConcurrentHashMap得到了一些新的方法。 我有一個關於他們兩個問題:ConcurrentHashMap parallelismThreshold

  1. 他們爲什麼不以ConcurrentMap聲明?
  2. parallelismThreshold究竟意味着什麼?
+3

雷丁[文檔](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html)第一將是一個自然的發現方式... – Holger

回答

6
  1. 這些新方法似乎依賴於特定的ConcurrentHashMap實現細節,但你必須從Java 8作者得到的答案是肯定的。 (他們這樣做瀏覽)

  2. 從ConcurrentHashMap中的Javadoc中:

    這些批量操作接受parallelismThreshold說法。如果當前地圖大小估計小於給定閾值,則方法繼續進行。使用Long.MAX_VALUE的值可以抑制所有的並行性。使用1的值通過劃分爲足夠的子任務來充分利用用於所有並行計算的ForkJoinPool.commonPool(),從而獲得最大的並行度。通常情況下,您最初會選擇這些極端值中的一個,然後衡量使用中間開銷與吞吐量之間的值的性能。

3

parallelismThreshold的判定是否批量操作將被順序地或並行地執行。並行運行有一些開銷,所以它只在某個地圖大小閾值以上纔有用。

ConcurrentHashMaps支持一組順序和並行批量的 操作,不同於大多數Stream方法,被設計成安全地 ,常常理智,即使施加對正在 由其他線程同時更新地圖;例如,在計算共享註冊表中值的快照摘要時。有三種 類型的操作,每種操作有四種形式,接受帶有鍵,值,條目和(鍵,值)參數的功能和/或返回值。因爲ConcurrentHashMap的元素沒有以任何特定的方式排列在 中,並且可能在不同的並行執行中以不同的順序處理,所以提供的函數 的正確性應該不取決於任何排序或任何其他對象或值 在進行計算時可能暫時改變;和 除了for each action,理想情況下應該是無副作用的。對Map.Entry對象的批量 操作不支持方法setValue。

- forEach: Perform a given action on each element. A variant form applies a given 
    transformation on each element before performing the action. 
- search: Return the first available non-null result of applying a given function 
    on each element; skipping further search when a result is found. 
- reduce: Accumulate each element. The supplied reduction function cannot rely on 
    ordering (more formally, it should be both associative and commutative). 
    There are five variants: 
    - Plain reductions. (There is not a form of this method for (key, value) 
     function arguments since there is no corresponding return type.) 
    - Mapped reductions that accumulate the results of a given function applied 
     to each element. 
    - Reductions to scalar doubles, longs, and ints, using a given basis value. 

這些批量操作接受parallelismThreshold參數。如果當前地圖尺寸估計比給定閾值小 ,則方法 繼續進行。使用Long.MAX_VALUE的值可以抑制所有的並行性。通過使用值1,可以將最大平行度劃分爲足夠的子任務,以充分利用用於所有並行計算的ForkJoinPool.commonPool()。 通常,您最初會選擇這些極端值中的一個,然後使用中間值來衡量使用中間值的性能,這會影響開銷與吞吐量之間的關係。

Source