不可能使缓存的线程池具有大小限制吗?
限制缓存线程池的创建数量似乎是不可能的。 这是在标准Java库中实现static Executors.newCachedThreadPool的方式: public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } 因此,使用该模板继续创建固定大小的缓存线程池: new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new SynchronusQueue<Runable>()); 现在,如果您使用它并提交3个任务,一切都会好起来的。提交任何其他任务将导致拒绝执行异常。 试试这个: new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runable>()); 将导致所有线程按顺序执行。即,线程池将永远不会产生多个线程来处理您的任务。 这是ThreadPoolExecutor的execute方法中的错误吗?还是这是故意的?还是有其他方法? 编辑:我想要的东西完全类似于缓存的线程池(它会按需创建线程,然后在超时后将其杀死),但是它可以创建的线程数受到限制,并且一旦有线程就可以继续排队其他任务达到其线程限制。根据sjlee的答复,这是不可能的。查看ThreadPoolExecutor的execute()方法确实是不可能的。我将需要像SwingWorker一样子类化ThreadPoolExecutor并重写execute(),但是SwingWorker在execute()中所做的事情是一个完整的技巧。