[英]How can I make sure that all the spawned threads are done so that processing can continue?
我有一個ConcurrentMap
,我將ArrayList
中的元素放到地圖ArrayList
其他線程處理。 線程完成處理后,將結果添加到ConcurrentMap
並調用一個方法,以便讓“主”線程獲取並處理所有結果(來自ConcurrentMap
和ArrayList
)。
這種方法可行,但結果是調用該方法的次數與列表中元素的數量一樣多。
問題:在所有背景線程的結果完全填充ConcurrentMap
之后,我可以使用哪種構造以便一次調用該方法?
您可以使用CountDownLatch
將其與Arraylist中的所有項目一起初始化,並且每當一個進行中的項目使用countDown
方法對其進行countDown
計數時,
主線程可以在閂鎖上調用await
方法,await阻塞線程,直到計數器達到零為止。
在Java 8中,您可以執行此操作
ConcurrentMap<Key, Value> map = ...
listToProcess.parallelStream().forEach(e -> addElementToMap(e, map));
這將使用您擁有的所有CPU執行所有元素的處理,並且僅在完成所有處理后才返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.