java ExecutorService,更改fixedsize

时间:2014-07-29 18:47:19

标签: java multithreading

所以我想在之前声明之后更改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的变化影响整个队列?我是否需要重新加载整个队列(如果是这样,我该怎么做?)

1 个答案:

答案 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。