无法创建具有大小限制的缓存线程池?
似乎不可能创建缓存线程池,但对它可以创建的线程数有限制。
以下是在标准 Java 库中实现静态的方法: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
编辑:我想要的东西与缓存的线程池完全相同(它按需创建线程,然后在一段时间超时后杀死它们),但对它可以创建的线程数量有限制,并且能够在达到线程限制后继续排队其他任务。根据sjlee的回应,这是不可能的。看它的方法确实是不可能的。我需要像do一样进行子类化和覆盖,但是它所做的是一个完整的黑客攻击。execute()
ThreadPoolExecutor
ThreadPoolExecutor
execute()
SwingWorker
SwingWorker
execute()