[英]How do I test the completion of threads created under my testmethod in JUnit
[英]How do I schedule a print statement upon completion of 4 independent threads?
我有一個簡單的Java應用程序,該應用程序可以計算最多一個由用戶提供的數字的質數,並打印出這些數字。 我以此為基礎,包括四個單獨的線程,這些線程遍歷4個單獨的數字范圍。 一旦所有4個線程都完成了迭代,我想打印最終的ArrayList。
我當前正在收到ConcurrentModificationException,因為在啟動4個線程之后,下一行代碼是print語句,該語句試圖打印ArrayList,當時該數組正被至少一個仍處於活動狀態的線程修改。
因此,我希望能夠在所有4個線程都死亡之后執行print語句。 此外,我希望不使用旋轉循環來執行此操作。 我沒有特別反對使用旋轉循環,除了我想有一種更好的方法可以這樣做,而且我可能必須為4個線程分配更大的優先級,以防止旋轉循環消耗大量的線程。中央處理器。
使用一個CountDownLatch初始化為4; 打印線程awaits
鎖存器,並且工作線程在終止之前調用鎖存器上的countdown
。
如果有四個線程一次修改ArrayList
,請確保正確同步它。 您可能要改用ConcurrentLinkedQueue (或者為每個線程使用不同的ArrayList
)
使用CountdownLatch
。 該類的Javadoc告訴如何
如果您使用java.util.concurrent.BlockingQueue ,則每個線程可以在完成時put()
一個)項目放到阻塞隊列中。
在print語句之前,該代碼可以從阻塞隊列中執行take()
,並且僅當take()
為每個線程返回一次后才繼續執行。 打印線程將在take()
上阻塞,而沒有任何要接收的線程。 這樣可以確保直到所有線程完成后才開始打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.