我正在开发一个多线程项目,在进行负载和性能测试时,我需要生成多个线程来测量客户端代码的端到端性能。所以我创建了下面使用的代码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
。我的一些队友说第二个(ThreadPoolExecutor)是正确的使用方式。
任何人都可以为我澄清这一点吗?