【发布时间】:2013-11-11 20:56:02
【问题描述】:
我一直在学习和试验 Java 中的多线程。 我有一个四核处理器(带有超线程)。 如果我有 1 个线程在它的 run() 函数中进入无限循环,它会使用我的 CPU 90%。
如何将其限制为 1 个核心(即 25%)或无法完成?我好奇地问。 提前谢谢你。
通过使用带有 BlockingQueue 而不是 executorService 的纯线程,我能够使用高达 90%/core。我还没有在 ExecutorService 上尝试 BlockingQueue - 但是使用并发列表,Executor 服务正在同步。
感谢大家的帮助!我真的很感激。
【问题讨论】:
-
实际上应该只使用 25%。您可能想看看您还运行了什么;也许你忘了关闭一些实例。如果能够如此轻松地从多核系统中获取所有处理能力,那就太棒了。
-
请注意,如果一个内核被充分利用,某些工具会报告 100% CPU。
-
查看调试窗口中的线程,会有不止一个处事。一个线程一次不能也不会使用超过 1 个核心。
-
如果你想限制它的原因是为了限制线程的资源消耗,那么你真的应该为此使用一些其他机制。例如,请参阅stackoverflow.com/questions/1202184/…
-
你在那个循环中做什么?那有必要吗?也许在里面做一些短暂的睡眠会帮助你更好地利用你的 CPU。
标签: java multithreading cpu-usage