我正在一台配备Intel Core i5处理器的PC上工作,据报道,该处理器有12个处理器,我相信它由6个内核组成,每个内核有两个线程.

我做了一些研究,似乎Java使用内核线程.我需要大幅提高现有Java程序的性能,并希望我能使用所有12个核心i5线程来实现这一点.

我正在try 使用IntStream().parallel.forEach()102功能,它看起来可以用尽可能多的线程并行嵌套for()个循环.

100

推荐答案

Java并行流使用ForkJoinPool.commonPool;它计算总线程数为Runtime.getRuntime().availableProcessors()-1(这是为了让一个处理器调用线程).

所以在你的例子中是12-1=11个处理器.

因此,您可以使用11个线程进行多线程操作.

例如,在我的系统上,我有8个可用的处理器&;我可以看到下面的操作是由7个线程执行的:

System.out.println(Runtime.getRuntime().availableProcessors());
        IntStream.range(0, 1000000).parallel()
                .forEach(value -> System.out.println(value + "  " + Thread.currentThread().getName()));

Java相关问答推荐

Selenium Java:无法访问IFRAME内部的元素

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

使用ExecutorService时在ThreadFactory中触发自定义newThread函数

我应该避免在Android中创建类并在运行时编译它们吗?

同时运行JUnit测试和Selenium/Cucumber测试时出现问题

与不同顺序的组进行匹配,不重复组但分开

如何对多个字段进行分组和排序?

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

垃圾回收器是否真的删除超出作用域的对象?

带有可选部分的Java DateTimeForMatter

为什么项目名称出现在我的GET请求中?

如何设计包含已知和未知键值对映射的Java类?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

活泼的一次判断成语,结果中等

Java 17与Java 8双重表示法

如何在Spring Boot Auth服务器上正确配置CORS?

字符串的Gzip压缩在java11和java17中给出了不同的结果

Java中的一个错误';s stdlib SocksSocketImpl?

如果c不为null,Arrays.sort(T[]a,Comparator<;?super T>;c)是否会引发ClassCastException?

读取ConcurrentHashMap中的可变对象