这是一个与出现在以下位置的问题类似的问题:How to ensure Java threads run on different cores .然而,在 Java 中可能已经取得了很大的进步,而且,我找不到我在那个问题中寻找的答案。
我刚写完一个多线程程序。该程序产生了多个线程,但似乎只使用了一个内核。该程序更快(我正在并行化使其更快的东西),但它肯定不会使用所有可用的内核,通过运行“top”来判断。
有什么想法吗?这是预期的行为吗?
一般的代码结构如下:
for (some values in i)
{
start a thread of instantiated as MyThread(i)
(this thread uses heavily ConcurrentHashMap and arrays and basic arithmetic, no IO)
add the thread to a list T
}
foreach (thread in T)
{
do thread.join()
}
最佳答案
如果它几乎恰好是一个 CPU 的 100%,则可能意味着您确实拥有
- 一个核心线程负责所有工作,而其他核心线程则不做那么多。
- 您锁定的一个资源,只有一个线程有机会运行。
如果您正在使用大约一个 CPU,这可能意味着这就是您的 CPU 的所有工作,因为您正在等待诸如 IO(网络和/或磁盘)之类的东西
我建议您查看 VisualVM 中线程的状态。它将帮助您确定哪些线程正在运行,并让您了解它们的行为模式。我还建议您使用 CPU 分析器来帮助找到瓶颈。
关于java - 如何让Java使用多线程线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534915/