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

Java 如何将运行无限循环的线程限制为1个核心?,java,multithreading,cpu-usage,Java,Multithreading,Cpu Usage,我一直在学习和试验Java中的多线程。 我有一个四核处理器(带超线程)。 如果在其run()函数中有一个线程在无限循环中运行,那么它将利用我的CPU 90% 我怎样才能将此限制为1个核心(即25%),否则无法完成?我问是出于好奇。 先谢谢你 通过使用带有BlockingQueue而不是executorService的纯线程,我可以使用高达90%的/core。我还没有在ExecutorService上试验BlockingQueue,但是在并发列表中,Executor服务正在同步 谢谢大家的帮助!

我一直在学习和试验Java中的多线程。 我有一个四核处理器(带超线程)。 如果在其run()函数中有一个线程在无限循环中运行,那么它将利用我的CPU 90%

我怎样才能将此限制为1个核心(即25%),否则无法完成?我问是出于好奇。 先谢谢你


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


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

纯java无法做到这一点,您需要
JNI
来为您做到这一点


请看,它可能会对您有所帮助。

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


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

这取决于您的线程正在执行的操作

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


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

事实上,它应该只使用25%。你可能想看看你还跑了些什么;也许你忘了关闭一些实例。如果能很容易地从多核系统中获得所有的处理能力,那就太棒了。请注意,如果一个单核得到充分利用,某些工具会报告100%的CPU。查看调试窗口中的线程,将有多个线程在做事情。一个线程一次不能也不会使用超过1个内核。如果您想要限制这一点的原因是为了限制线程的resurce消耗,那么您确实应该为此使用其他机制。例如,看看你在这个循环中做了什么?有必要吗?也许它里面的一些短暂睡眠会帮助你更好地利用你的cpu。