假设在具有4个CPU的机器中运行了一个线程池,我想对该池进行负载动态控制。当池中有一些线程运行时,是否可以更改corePoolSize?也就是说,当负载较低时,允许最多2个线程同时运行,但是当负载较高时,允许4个线程。如果没有,是否有适当的解决方案?
答案 0 :(得分:1)
当池中有一些线程运行时,是否可以更改corePoolSize?
当然可以。 corePoolSize
中的volatile
被标记为ThreadPoolExecutor
,因此您可以随时根据您的计算机负载调用tpe.setCorePoolSize(...)
。您甚至可以在池中生成一个作业来休眠,检查负载并调整核心池大小。您当然希望将另一个线程添加到核心大小来执行此操作。
也就是说,当负载较低时,最多允许2个线程同时运行,但是当负载较高时,允许4个线程。
这听起来不错,但重要的是要注意,实际上唯一有意义的是,您发送到线程池的作业是否完全受CPU限制。任何IO(磁盘,网络等)都意味着降低并发性没有多大意义。
这就是说,虽然我已经编写了大量的线程应用程序,但我从未觉得我必须这样做。