我想了解 Java 中的 ExecutorService。当我使用 1 个线程或 4 个线程时,性能差异不大。我有一个四核 CPU,并且没有任何其他进程在运行。
ExecutorService exService = Executors.newFixedThreadPool(4);
exService.execute(new Test().new RunnableThread());
exService.awaitTermination(25, TimeUnit.SECONDS);
class RunnableThread implements Runnable {
@Override
public void run() {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
long cnt = 0;
for (cnt = 0; cnt < 999999999; cnt++) {
try {
for (long j = 0; j < 20; j++){
x += j;
}
} catch (Exception e) {
e.printStackTrace();
}
}
stopWatch.stop();
System.out.println(stopWatch.getTime());
}
}
如果我的理解是正确的,当我说 newFixedThreadPool(4) 时,我的任务应该有接近 4 倍的性能提升,对吗?
最佳答案
不幸的是,将工作负载分配给线程并没有什么神奇之处。
每个任务都在自己的线程上运行。它不会以某种方式自动转换为并发执行路径。
如果你只有一个任务,剩下的三个线程会空闲。
如果您可以将工作负载拆分为多个可以同时运行的任务(并且您必须自己拆分),那么多线程只会加快速度。
关于java - Java中ExecutorService的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050241/