2011-01-27 15 views
2

Runnableを実装する2つのクラスがあります。実行するスレッドを10個作成する必要があります。次のコードを使用します。Java Executorを使用したマルチスレッド

ExecutorService es = Executors.newFixedThreadPool(10); 
    Runnable r=new TestThread1(); 
    Runnable r1=new TestThread2(); 
    es.execute(r); 
    es.execute(r1); 

だけ2ランナブルが存在するため、唯一の2つのスレッドがexecute.howするために使用されているが、私は一つだけThread上で実行可能なスレッド

+0

5つのスレッドでそれぞれのRunnableを実行したいのですか? – Rich

+0

はい... 1つの実行可能ファイルに複数のスレッドを割り当てようとしています – ish

+0

1つの実行可能ファイルに複数のスレッドを使用したいという気持ちがあります。タスクを複数のスレッドに分散させるには、コードを書き直す必要があります。 –

答えて

1

一つRunnableの全く増加しないshud。複数のスレッドにまたがって自動的に分割されることはありません。

スレッドプール全体を利用する場合は、より多くの実行可能オブジェクトを作成します。

3

実行者にさらにジョブを提出すると、スレッドが作成されます。サブミットされたジョブの数が10を超えた場合(この場合)、新しいジョブはキューに入れられます。スレッドが解放されると、キューに入れられたジョブの実行に使用されます。

for (int i = 0; i < 5; ++i) { 
    if (!es.isShutdown()) { 
     es.submit(new TestThread1()); 
     es.submit(new TestThread2()); 
    } 
} 
+0

私は、2つの実行可能クラスにいくつかのデータベース挿入ステートメントを持っています。ジョブはループ内で5回繰り返されます。各値は5回挿入されました.i回避したい – ish

+0

そのシャットダウンがExecutorServiceには、このケースを処理するために変更できる拒否ポリシーがあります。 –

0

Executors.newFixedThreadPool(size)戻りThreadPoolExecutorインスタンス:あなたはexecutorが10個のスレッドを作成する場合は、10個のジョブを提出する必要があります。 ThreadPoolExecutorの

Javadocは言う:」他のワーカースレッドがアイドル状態であっても、新しいタスクが方法ThreadPoolExecutor.executeに提出され、corePoolSizeスレッドが実行されているよりも少ない、新しいスレッドが要求を処理するために作成され、とき。 "

つまり、プールを満たすために10スレッドを実行する必要があります。

関連する問題