【发布时间】:2015-01-18 21:24:29
【问题描述】:
我对使用多核处理器的 Java 中的多线程有疑问。据我所知,当有单核处理器时,多线程工作,因为每个线程都会从 cpu 时间获得一个切片来运行,现在我们有了多核处理器,正如我所假设的,JVM 也会更新以获得这个优势,不是吗?或者不是,这就是为什么在 Java 7 中引入 fork/join 框架进行多处理的原因?
非常感谢。
【问题讨论】:
-
JVM 从第一个版本开始就支持多线程。 Fork/Join 是一种解决问题的特殊方法。我很难知道您的实际问题是什么?
-
哪个JVM?我确信大多数 JVM 实现在执行多线程代码时会利用多核。但这确实取决于实施。 Fork/Join 框架是一个使用 java.lang.Thread 的更高级别的库。
-
我很确定线程在哪个物理内核上运行的想法已被操作系统本身抽象掉了。因此,如果您的语言完全支持线程,那么它将支持在多个内核上运行线程,因为它不知道
-
@MrWiggles 最初只支持“绿色线程”。
-
如果问题真的只是“JVM 可以使用多核吗”,这将非常容易测试。只需编写一个定义
Runnable的小程序,它会永远做一些工作(Random r = new Random(); while (true) { r.nextInt(); }会做),然后启动 20 个使用该可运行对象的线程。运行它,然后查看您的 CPU 利用率。
标签: java multithreading