Mar*_*nna 11 java multithreading executorservice threadpool
我是多线程的新手,我正在开发一个项目,我试图在我的Java程序中使用4个CPU.我想做点什么
int numProcessors = Runtime.getRuntime().availableProcessors();
ExecutorService e = Executors.newFixedThreadPool(numProcessors);
Run Code Online (Sandbox Code Playgroud)
这可以保证每个CPU都有一个线程工作吗?在我创建线程时,系统不会很忙,但是一段时间后它会非常繁忙.我认为操作系统会选择最不繁忙的CPU来创建线程,但是如果它们在创建时没有特别繁忙的话它是如何工作的呢?
此外,线程池服务应该重用线程,但如果它看到另一个CPU上有更多的可用性,它会杀死线程并在那里产生一个新线程吗?
这能保证每个 CPU 都有一个线程在工作吗?
如果您有四个需要同时执行的任务,则可以预期它们每个都有一个线程。在 HotSpot JVM 中,它会创建 Thread 对象,该对象是创建池时实际线程的代理。实际线程何时创建以及如何创建对您来说很重要。
在我创建线程时,系统不会很忙,但一段时间后它会非常繁忙。我认为操作系统会选择最不繁忙的 CPU 来创建线程,但是如果它们在创建时都不是特别繁忙,那么它如何工作呢?
线程由操作系统创建,并将其添加到要调度的线程列表中。
另外,线程池服务应该重用线程,但是如果它看到另一个 CPU 上有更多的可用性,它会杀死该线程并在那里生成一个新线程吗?
Java 在这件事上没有发言权。操作系统决定。它不会杀死并重新启动线程。
线程并不像您建议的那样与 CPU 绑定。操作系统根据需要运行的线程以及空闲的 CPU 在 CPU 之间传递线程。
归档时间: |
|
查看次数: |
953 次 |
最近记录: |