ExecutorService vs ThreadPoolExecutor using LinkedBlockingQueue
我正在处理一个多线程项目,其中我需要生成多个线程来测量客户端代码的端到端性能,因为我正在做负载和性能测试。因此,我创建了下面的代码,该代码使用.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());
}
这会有什么不同吗?我试图了解我使用的原始代码和使用粘贴的新代码之间的区别是什么。我的一些队友说第二个(ThreadPoolExecutor)是正确的使用方式。ExecutorService
ThreadPoolExecutor
任何人都可以为我澄清这一点吗?