【发布时间】:2015-02-19 22:53:21
【问题描述】:
我对如何在 Java 中执行并行线程进行了一些研究。
我找到了一个简单的解决方案,即使用ExecutorService 类。
它基本上是通过调用以下方式来使用的:
ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
每个线程执行一个简单的任务,例如System.out.println()。
有人告诉我Runtime.getRuntime().availableProcessors() 返回处理器的数量,这基本上是能够运行您的代码的执行引擎的数量,如果使用超线程,物理上不同的处理器或逻辑处理器。
但是,当我改用以下行时:
ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
我的程序实际上运行得更快(尽管我还没有计算出确切的运行时间,只是观察了明显的速度变化)。
这怎么可能?另外,如果我将这个数字乘以 3,它的速度会更快,即使速度随着因子的增加而停止增加。
我的电脑是运行在 Yosemite 上的 MacBook Pro,配备 2.2 GHz Intel Core i7 处理器。
【问题讨论】:
-
您的任何线程是否执行 I/O?机器上是否正在运行其他进程?
-
这种JAVA全大写的趋势是什么?它是“Java”。
标签: java multithreading parallel-processing processor