Я работаю над многопоточным проектом, в котором мне нужно порождать многолистные потоки, чтобы измерить конечную производительность моего клиентского кода, поскольку я выполняю тестирование нагрузки и производительности. Поэтому я создал ниже код, который использует 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
, и новым кодом, который я вставил, который использует ThreadPoolExectuor
? Некоторые из моих товарищей по команде сказали, что второй (ThreadPoolExecutor) правильный способ использования?
Может ли кто-нибудь прояснить эту вещь для меня? Спасибо за помощь.