負荷とパフォーマンスのテストを行っているため、クライアント コードのエンド ツー エンドのパフォーマンスを測定するために複数のスレッドを生成する必要があるマルチスレッド プロジェクトに取り組んでいます。そこで、を使用している以下のコードを作成しましたExecutorService
。
以下はコードですExecutorService
:
public class MultithreadingExample {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(20);
for (int i = 0; i < 100; i++) {
executor.submit(new NewTask());
}
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
}
}
class NewTask implements Runnable {
@Override
public void run() {
//Measure the end to end latency of my client code
}
}
問題文:
今、私はインターネットでいくつかの記事を読んでいました。もあることがわかりましたThreadPoolExecutor
。そのため、どちらを使用すればよいか混乱しました。
上記のコードを次のコードから置き換えると:
ExecutorService executor = Executors.newFixedThreadPool(20);
for (int i = 0; i < 100; i++) {
executor.submit(new NewTask());
}
に:
BlockingQueue<Runnable> threadPool = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor tpExecutor = new ThreadPoolExecutor(20, 2000, 0L, TimeUnit.MILLISECONDS, threadPool);
tpExecutor.prestartAllCoreThreads();
for (int i = 0; i < 100; i++) {
tpExecutor.execute(new NewTask());
}
これは何か違いがありますか?ExecutorService
を使用して元のコードと を使用して貼り付けた新しいコードの違いを理解しようとしていThreadPoolExecutor
ます。私のチーム メイトの何人かは、2 番目のもの (ThreadPoolExecutor) が正しい使用方法であると言いました。
誰かが私のためにこれを明確にすることができますか?