一尘不染

Java如何根据CPU内核扩展线程?

java

我想用Java解决带有多个线程的数学问题。我的数学问题可以分为多个工作单元,我想通过几个线程来解决。

我不希望有固定数量的线程在工作,而是与CPU核心数量匹配的线程数量。我的问题是,为此我在互联网上找不到简单的教程。我发现的只是带有固定线程的示例。

如何才能做到这一点?你能提供例子吗?


阅读 309

收藏
2020-03-24

共1个答案

一尘不染

你可以通过使用静态运行时方法,确定提供给Java虚拟机的进程数availableProcessors。确定可用处理器的数量后,请创建该数量的线程,并相应地拆分你的工作。

更新:为了进一步阐明,线程只是Java中的一个对象,因此你可以像创建任何其他对象一样创建它。因此,假设你调用了上面的方法,发现它返回了2个处理器。太棒了 现在,你可以创建一个循环,该循环生成一个新的线程,并拆分该线程的工作,然后触发该线程。这是一些伪代码来说明我的意思:

int processors = Runtime.getRuntime().availableProcessors();
for(int i=0; i < processors; i++) {
  Thread yourThread = new AThreadYouCreated();
  // You may need to pass in parameters depending on what work you are doing and how you setup your thread.
  yourThread.start();
}
2020-03-24