当我在应用程序中有这个代码时:
Executors.newFixedThreadPool(4);
但我从不使用这个线程池.空闲线程会消耗CPU时间吗?如果是这样 – 为什么?
解决方法:
Creates a thread pool that reuses a fixed number of threads operating off a shared unbounded queue. At any point, at most nThreads threads will be active processing tasks.
这可能会导致假设:我们并不完全确切.但正如另一个答案清楚地发现 – 我们可以知道,实施实际上是完全懒惰的.从而:
ExecutorService service = Executors.newFixedThreadPool(4);
甚至没有引起很多设置.实施可以自由等待任何
service.submit(...
即将发生.
另一方面,可以(理论上)立即创建该线程池,并且还可以创建4个OS线程.如果是后一种情况,那么所有这些线程都将处于空闲状态,因此它们不应占用任何CPU资源.
但是,当然,正如Elliott正确地指出的那样,创建池和(可能)创建1到4个线程的初始步骤需要CPU活动.
当然:线程是OS资源.即使他们“只存在”而什么也不做;他们有“成本”.同样,它可能依赖于OS,如果它可能变成一个问题(比如达到一些“现有线程的最大数量”限制).
所以:“当前”的实现是“完全”的懒惰;如果你真的只调用newFixedThreadPool()而不使用生成的ExecutorService ……没有任何反应(就创建的新线程而言).
标签:java,multithreading,threadpoolexecutor,cpu-time
来源: https://codeday.me/bug/20190527/1164133.html