簡體   English   中英

實現多個並發線程並在執行過程中返回結果的最佳方法?

[英]Best way to implement multiple concurrent threads that return results in the middle of execution?

我正在負載測試工具中實現以下功能,以模擬目標應用程序上的重負載:

並發啟動多個線程以執行相同類型的操作。

每個線程將循環n次。 在每個循環的末尾,都有可用的測試結果,並將其添加到所有循環結束后返回的列表中。

我目前正在使用CallableFuture ,並將所有線程返回的結果列表放入所有線程運行完畢並提供給Future另一個列表中。 問題是,如果程序執行中斷,我可能會失去可用的內容。 我希望能夠保存整理循環中可用的結果,而線程仍在處理剩余的循環。

Java並發庫中是否有適合此目的的東西? 還是我要構建的負載測試功能有更好的設計?

提前致謝!

您可以在結果出現時將結果傳遞給BlockingQueue。 可以由另一個線程或首先觸發任務的線程拾取。

java.util.concurrent.CyclicBarrier類是一種同步機制,可以同步通過某種算法進行的線程。 換句話說,這是所有線程必須繼續等待直到所有線程到達它的屏障。

創建一個CyclicBarrier

創建CyclicBarrier時,可以指定釋放線程之前要等待的線程數。 這是創建CyclicBarrier的方法:

CyclicBarrier barrier = new CyclicBarrier(2);

在CyclicBarrier中等待

這是線程在CyclicBarrier中等待的方式:

barrier.await();

您還可以為等待的線程指定超時。 超時后,即使不是所有的N個線程都在CyclicBarrier中等待,該線程也會被釋放。 這是您指定超時的方法:

barrier.await(10, TimeUnit.SECONDS);

等待線程在CyclicBarrier中等待,直到:

最后一個線程到達(調用await())該線程被另一個線程中斷(另一個線程調用其interrupt()方法)另一個等待線程被中斷另一個等待線程在CyclicBarrier等待時超時CyclicBarrier.reset()方法是由某些外部線程調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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