【发布时间】:2011-05-30 05:29:56
【问题描述】:
我想对多线程程序进行一些调整。
如果我知道有多少线程可以真正并行工作,我可以让程序更有效。
在 Java 中有没有办法获取这些信息?
【问题讨论】:
-
好问题!谢谢提问
我想对多线程程序进行一些调整。
如果我知道有多少线程可以真正并行工作,我可以让程序更有效。
在 Java 中有没有办法获取这些信息?
【问题讨论】:
你可以使用
Runtime.getRuntime().availableProcessors()
但它更像是一个最好的猜测,甚至被 API 提及
此值可能会在特定的虚拟调用过程中发生变化 机器。对可用数量敏感的应用程序 因此,处理器应偶尔轮询此属性并调整 适当地使用他们的资源。
【讨论】:
关于availableProcessors()方法的一点说明,它不区分物理cpu和虚拟cpu。例如,如果您在计算机上启用了超线程,则该数字将是物理 CPU 数量的两倍(这有点令人沮丧)。不幸的是,在纯 Java 中无法确定真实 CPU 与虚拟 CPU。
【讨论】:
Runtime.getRuntime().availableProcessors();
【讨论】:
怎么样(代码 sn-ps 说 1000 字):
public class Main {
/**
* Displays the number of processors available in the Java Virtual Machine
*/
public void displayAvailableProcessors() {
Runtime runtime = Runtime.getRuntime();
int nrOfProcessors = runtime.availableProcessors();
System.out.println("Number of processors available to the Java Virtual Machine: " + nrOfProcessors);
}
public static void main(String[] args) {
new Main().displayAvailableProcessors();
}
}
【讨论】:
在 Windows 上是肯定的。带有 kernel32.dll 的 JNA。使用来自GetNativeSystemInfo 调用的SYSTEM_INFO 结构。除其他外,还有dwNumberOfProcessors。
我相信这将提供实际安装的处理器数量,而不是可用数量。
【讨论】: