我正在使用一个固定大小的Java线程池(ExecutorService)。假设我将一个任务提交到线程池中并且该任务变为空闲状态。
是否有可能从线程池中删除空闲任务,以便可以处理队列中的其他任务,然后稍后再次添加空闲任务?
是否有可能从线程池中删除空闲任务,以便可以处理队列中的其他任务,然后稍后再次添加空闲任务?
如果您从ExecutorService
转向ThreadPoolExecutor,您可以通过以下API实现:
public void setCorePoolSize(int corePoolSize)
public void setMaximumPoolSize(int maximumPoolSize)
设置允许的最大线程数。这将覆盖构造函数中设置的任何值。如果新值小于当前值,则在下次空闲时,多余的现有线程将被终止。
Runnable
可能处于空闲状态(我想是在等待I/O或其他资源),这是使用线程池的主要原因之一。
wait
,它仍将从池中消耗一个线程。 - Thilo