如何将运行无限循环的线程限制为1个核心?

时间:2013-11-11 20:56:03

标签: java multithreading cpu-usage

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

如何将此限制为1个核心(即25%)或无法完成?我出于好奇而问。 提前谢谢。


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

谢谢大家的帮助!我真的很感激。

3 个答案:

答案 0 :(得分:2)

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

因此不需要将此线程分配给一个核心,因为它不能在任何时候通过设计使用多个核心。

答案 1 :(得分:1)

这取决于你的线程在做什么。

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

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

答案 2 :(得分:0)

你不能在纯java中这样做,你需要JNI为你做这件事。

只需查看this,它可能对您有帮助。