我们通过executors.newFixThreadPool 创建指定大小的线程池,在所有线程都结束后,线程池并未释放线程。我们之后再新建的线程池的线程将一直累加。解决这个问题,只需要设置如下:
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
executor.setKeepAliveTime(10, TimeUnit.SECONDS);
executor.allowCoreThreadTimeOut(true);
这样设置后,队列的任务全部结束后将,释放所有的线程。