我对多线程还很陌生,我正在开发一个项目,尝试在我的 Java 程序中使用 4 个 CPU。我想做类似的事情
int numProcessors = Runtime.getRuntime().availableProcessors();
ExecutorService e = Executors.newFixedThreadPool(numProcessors);
这能保证每个 CPU 都有一个线程在工作吗?在我创建线程时,系统不会很忙,但一段时间后它会非常繁忙。我认为操作系统会选择最不繁忙的 CPU 来创建线程,但是如果它们在创建时都不是特别繁忙,那么它如何工作呢?
另外,线程池服务应该重用线程,但是如果它看到另一个 CPU 上有更多的可用性,它会杀死该线程并在那里生成一个新线程吗?
这能保证每个 CPU 都有一个线程在工作吗?
如果您有四个需要同时执行的任务,则可以预期它们每个都有一个线程。在 HotSpot JVM 中,它会创建 Thread 对象,该对象是创建池时实际线程的代理。实际线程何时创建以及如何创建对您来说很重要。
在我创建线程时,系统不会很忙,但一段时间后它会非常繁忙。我认为操作系统会选择最不繁忙的 CPU 来创建线程,但是如果它们在创建时都不是特别繁忙,那么它如何工作呢?
线程由操作系统创建,并将其添加到要调度的线程列表中。
另外,线程池服务应该重用线程,但是如果它看到另一个 CPU 上有更多的可用性,它会杀死该线程并在那里生成一个新线程吗?
Java 在这件事上没有发言权。操作系统决定。它不会杀死并重新启动线程。
线程并不像您建议的那样与 CPU 绑定。操作系统根据需要运行的线程以及空闲的 CPU 在 CPU 之间传递线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)