2017-07-26 15 views
-1

私は10,000スレッドを実行しなければならない状況があります。明らかに、1台のマシンはこれらの多くのスレッドを並行して実行することはできません。開始時に特定の数のスレッドを実行するようにスレッドプールに依頼する方法はありますか?スレッドが終了するとすぐに、残りのスレッドは処理を開始できますか?Executor pool limit一度にスレッド数を制限します

+0

[ThreadPoolExecutor](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html)を見ましたか? – bradimus

+0

これらはスレッドではなく、それらは_tasks_です。スレッドプールは、限られた数のスレッドを使用して無限の数のタスクを実行します。 –

+0

タイトルは "Executor pool"です。 Webで類似のトピックを検索するときに、Javaでスレッドプールを設定する方法を示す記事が見つかりませんでしたか?私は非常に信じがたいことがわかります。 **あなたはどんな研究もしていないようです**。その理由でダウン投票された!! – Andreas

答えて

2

Executors.newFixedThreadPool(nThreads)あなたが探している可能性が最も高いものです。一度に実行されるスレッドの数は、指定されたスレッドの数だけになります。そして、1台のマシンで同時に10,000スレッドを実行することはできませんが、同時に実行することは可能です。各スレッドのリソース集中度に応じて、 Executors.newCachedThreadPool()を使用する方が効率的です。必要な数のスレッドが作成され、終了したスレッドが再利用されます。

0

スレッドのグループに対して10,000のタスクを実行するように思えます。比較的簡単な方法は、リストを作成し、すべてのタスクをリストに追加し、それらをRunnableにラップすることです。次に、コンストラクタでリストを受け取り、リストのRunnableをポップして実行するクラスを作成します。このアクティビティは、何らかの方法で同期させる必要があります。リストが空の場合、クラスは終了します。このクラスを使用していくつかのスレッドを開始します。彼らはリストを焼き尽くして停止するでしょう。あなたのメインスレッドは、リストの長さを監視することができます。

+0

そのクラスは既に存在します。それは 'java.util.concurrent.ThreadPoolExecutor'と呼ばれます。 –

関連する問題