[英]Best way to implement multiple concurrent threads that return results in the middle of execution?
我正在負載測試工具中實現以下功能,以模擬目標應用程序上的重負載:
並發啟動多個線程以執行相同類型的操作。
每個線程將循環n次。 在每個循環的末尾,都有可用的測試結果,並將其添加到所有循環結束后返回的列表中。
我目前正在使用Callable
和Future
,並將所有線程返回的結果列表放入所有線程運行完畢並提供給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.