我在寻找ExecutorService
,它可根据需要创建线程,达到预定义的限制并在保持活动时间后销毁空闲线程。按需线程数有限的执行程序
下面的构造函数创建一个ThreadPoolExecutor
固定线程数:
// taken from Executors.newFixedThreadPool()
new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
所以我试图创建一个ExecutorService
这样:
// taken from Executors.newCachedThreadPool()
new ThreadPoolExecutor(0, nThreads,
CACHED_POOL_SHUTDOWN_DELAY, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
但它不工作不如预期,当nThreads
正在使用中,Executor
不排队新任务,但抛出RejectedExecutionException
。我知道我可以实现一个处理程序,但它并没有帮助我。
如何创建前面所述的Executor
?
谢谢,你说得对。但可能会发生成千上万的排队队列,我不想创建如此庞大的队列。 – Stephan
@Stephan您需要对无法运行的任务(使用最大池大小)进行操作并且无法入队(队列已满)...您可以限制队列的大小,但您将收到一旦它已满,就会发生异常。 – assylias
这是真的。我从队列的构造函数中删除了'capacity'参数,因此它被设置为'Integer.MAX_VALUE'。 – Stephan