所以我想在之前声明之后更改fixedthreadpool大小,我将如何进行此操作。我尝试了这个,但它不起作用:
ExecutorService pool = Executors.newFixedThreadPool(3);
//pool has 21 threads in queue
//do somestuff
network sends a change in thread limit signal when there are 12 threads left in queue
//redeclare:
pool = Executors.newFixedThreadPool(4);
但它不起作用,一次只能继续执行3个线程。
我想我知道问题是什么:执行程序将21个线程存储在队列中,并且不会更改固定的线程池大小,直到队列被清除。 我不想要这个,我怎么做才能让threadpoolsize的变化影响整个队列?我是否需要重新加载整个队列(如果是这样,我该怎么做?)
答案 0 :(得分:5)
创建一个新池确实摆脱了旧池,除非你关闭它,你现在有两个池,一个有三个线程,一个有四个。
最简单的方法是创建一个ThreadPoolExecutor(这里是实现类)这将允许您更改核心池大小和最大池时间。
// start with a pool with a min/max size of 3.
ThreadPoolExecutor executor = new ThreadPoolExecutor(3,3,60, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>());
// set the min/max size to 4.
executor.setMaximumPoolSize(4);
executor.setCorePoolSize(4);
另一种选择是,如果您知道4是合理的,则从一开始就使池大小为4。