2017-07-26 88 views
-1

我有一種情況需要運行一些10,000個線程。顯然,一臺機器不能並行運行多個線程。有什麼辦法可以讓線程池在開始時運行一些特定數量的線程,只要一個線程完成,剩下的線程就可以開始處理了?一次執行程序池限制線程數

+0

你看過[ThreadPoolExecutor](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html)嗎? – bradimus

+0

那些不是線程,那些是_tasks_。線程池使用有限數量的線程來運行無限數量的任務。 –

+0

標題說「執行者池」。你是說當你在網上搜索類似的主題時,你沒有發現*任何文章展示瞭如何在Java中設置線程池?我覺得很難相信。這看起來更像**你沒有做任何研究**。因爲這個原因被低估了! – Andreas

回答

2

Executors.newFixedThreadPool(nThreads)是最有可能的你正在尋找。只有指定的線程數量一次可以運行多少個線程。是的,一臺機器不能同時運行10,000個線程,但它可以同時運行它們。根據每個線程的資源密集程度,在使用 Executors.newCachedThreadPool()時,可能會更高效,其中根據需要創建多個線程,並且已完成的線程將被重用。

0

聽起來你想在一組線程上運行10,000個任務。一個相對簡單的方法是創建一個List,然後將所有任務添加到列表中,並將它們包裝到Runnable中。然後,創建一個在構造函數中使用列表的類,並彈出列表的Runnable,然後運行它。此活動必須以某種方式進行同步。當列表爲空時,類將退出。使用這個類開始一些線程數。他們會燒掉名單然後停下來。您的主線程可以監視列表的長度。

+0

該類已經存在。它被稱爲'java.util.concurrent.ThreadPoolExecutor'。 –