2

我一直在学习和试验 Java 中的多线程。我有一个四核处理器(带有超线程)。如果我有 1 个线程在它的 run() 函数中进入无限循环,它会占用我的 CPU 90%。

如何将其限制为 1 个核心(即 25%)或无法完成?我好奇地问。先感谢您。


通过使用带有 BlockingQueue 而不是 executorService 的纯线程,我能够使用高达 90%/core。我还没有在 ExecutorService 上尝试 BlockingQueue - 但是使用并发列表,Executor 服务正在同步。

谢谢大家的帮助!对此,我真的非常感激。

4

3 回答 3

2

单个线程最多可以利用一个内核的 100%。在四核机器上,Windows 任务管理器将此报告为 25% 的 CPU 使用率,而 Linux 任务管理器将此报告为 100% 的 CPU 使用率。

所以没有必要将此线程分配给一个核心,因为它在设计上不能在任何时候使用多个核心。

于 2013-11-12T09:12:53.080 回答
1

这在一定程度上取决于您的线程在做什么。

请记住,其他线程正在运行,例如垃圾收集器和几个 JIT 编译器线程。它们也会消耗 CPU。

根据我的经验,在一个单线程程序中拥有 300% 的 CPU(意味着您的程序使用 3 个内核)并在启动后具有大量 GC 负载的情况并不少见。一段时间后,当 JIT 完成大部分工作时,这将趋于平稳。

于 2013-11-12T09:17:21.160 回答
0

你不能在纯java中做到这一点,你需要JNI为你做到这一点。

看看这个,它可能对你有帮助。

于 2013-11-11T21:15:19.790 回答