簡體   English   中英

如何在完成4個獨立線程后安排打印語句?

[英]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告訴如何

  1. 主線程使用線程數創建閂鎖。
  2. 主線程啟動所有工作線程。
    1. 每個線程都有對閂鎖的引用。
    2. 完成工作時,它將倒計時。
  3. 主線程等待鎖存器計數到0。
  4. 主線程完成打印工作。

如果您使用java.util.concurrent.BlockingQueue ,則每個線程可以在完成時put()一個)項目放到阻塞隊列中。

在print語句之前,該代碼可以從阻塞隊列中執行take() ,並且僅當take()為每個線程返回一次后才繼續執行。 打印線程將在take()上阻塞,而沒有任何要接收的線程。 這樣可以確保直到所有線程完成后才開始打印。

暫無
暫無

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

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