簡體   English   中英

如何確保所有產生的線程都已完成,以便繼續處理?

[英]How can I make sure that all the spawned threads are done so that processing can continue?

我有一個ConcurrentMap ,我將ArrayList中的元素放到地圖ArrayList其他線程處理。 線程完成處理后,將結果添加到ConcurrentMap並調用一個方法,以便讓“主”線程獲取並處理所有結果(來自ConcurrentMapArrayList )。
這種方法可行,但結果是調用該方法的次數與列表中元素的數量一樣多。
問題:在所有背景線程的結果完全填充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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM