java - Java中ExecutorService的性能

标签 java multithreading

我想了解 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/

相关文章:

java - 带有 Jersey : NoClassDefFoundError 的 json

java - 将 long 和 bytearray 连接到另一个 bytearray

java - Java 16的Stream.toList()和Stream.collect(Collectors.toList())的区别?

c++ - std::thread 消耗 Qt 中的所有 CPU

linux - sighandler 和其他线程

java - 如何在不到达当前歌曲结尾的情况下播放 MediaPlayer 的下一首歌曲

java - 如何在 Glassfish (2.x) 中设置 RMI,以便注入(inject)远程 EJB

c# - WPF 任务管理器 : Handling Refreshing CPU Load Value?

multithreading - 使用 TChan 进行类似管道的操作

c++ - 同时覆盖具有相同值的变量安全吗?