动态更改ThreadPoolExecutor的corePoolSize

时间:2016-07-27 14:22:50

标签: java multithreading threadpool java.util.concurrent threadpoolexecutor

假设在具有4个CPU的机器中运行了一个线程池,我想对该池进行负载动态控制。当池中有一些线程运行时,是否可以更改corePoolSize?也就是说,当负载较低时,允许最多2个线程同时运行,但是当负载较高时,允许4个线程。如果没有,是否有适当的解决方案?

1 个答案:

答案 0 :(得分:1)

  

当池中有一些线程运行时,是否可以更改corePoolSize?

当然可以。 corePoolSize中的volatile被标记为ThreadPoolExecutor,因此您可以随时根据您的计算机负载调用tpe.setCorePoolSize(...)。您甚至可以在池中生成一个作业来休眠,检查负载并调整核心池大小。您当然希望将另一个线程添加到核心大小来执行此操作。

  

也就是说,当负载较低时,最多允许2个线程同时运行,但是当负载较高时,允许4个线程。

这听起来不错,但重要的是要注意,实际上唯一有意义的是,您发送到线程池的作业是否完全受CPU限制。任何IO(磁盘,网络等)都意味着降低并发性没有多大意义。

这就是说,虽然我已经编写了大量的线程应用程序,但我从未觉得我必须这样做。