Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多核处理器中的多线程_Java_Multithreading - Fatal编程技术网

Java多核处理器中的多线程

Java多核处理器中的多线程,java,multithreading,Java,Multithreading,我有一个关于Java中使用多核处理器的多线程的问题。正如我所知,当有单核处理器时,多线程工作,因为每个线程都会从cpu运行时间中获得一个片段,现在我们有了多核处理器,正如我所假设的,JVM也会被更新以获得这一优势,不是吗?或者不是,这就是为什么在Java7中引入fork/join框架进行多处理的原因? 非常感谢。是的,当有一个单核处理器时,每个线程将获得一部分CPU运行时间 是的,当有多个核时,它们将分布在它们之间。但是,如果线程多于内核(包括计算机中运行的其他进程/程序的线程),那么它们也只能

我有一个关于Java中使用多核处理器的多线程的问题。正如我所知,当有单核处理器时,多线程工作,因为每个线程都会从cpu运行时间中获得一个片段,现在我们有了多核处理器,正如我所假设的,JVM也会被更新以获得这一优势,不是吗?或者不是,这就是为什么在Java7中引入fork/join框架进行多处理的原因?

非常感谢。

是的,当有一个单核处理器时,每个线程将获得一部分CPU运行时间

是的,当有多个核时,它们将分布在它们之间。但是,如果线程多于内核(包括计算机中运行的其他进程/程序的线程),那么它们也只能获得CPU的一部分


如果您有单线程,并且希望生成更多线程,以便每个线程都可以执行部分工作,那么稍后您将不得不加入它们的结果。进行这种分叉(从一个线程到多个线程的数据)和连接(从多个线程到一个线程的数据)比一开始看起来要复杂得多,这就是为什么在Java 7中引入分叉/连接的原因。

JVM从第一个版本起就支持多线程。Fork/Join是解决问题的一种专门方法。我正在努力了解您的实际问题是什么?哪个JVM?我相信大多数JVM实现在执行多线程代码时都会利用多核。但这确实取决于实施情况。Fork/Join框架是一个使用java.lang.Thread的高级库。我很确定线程运行在哪个物理核心上的概念是由操作系统本身抽象出来的。因此,如果您的语言完全支持线程,那么它将支持在多个内核上运行线程,因为它不会know@MrWiggles最初只支持“绿色线程”,如果问题真的只是“JVM可以使用多个内核”的话,那么这将非常容易测试。只需编写一个小程序,定义一个永远可以运行的
Runnable
Random r=new Random();而(true){r.nextInt();}
就可以了),然后启动20个使用该Runnable的线程。运行它,并查看您的CPU利用率。