【发布时间】:2018-01-31 03:33:43
【问题描述】:
传统的 ThreadPoolExecutor 仅在没有可用于传入任务的空闲核心线程时使用提供的 BlockingQueue 来对项目进行排队。如果有空闲的核心线程,执行器会尝试直接为传入的任务分配线程。
我想要一个稍微不同的行为。我希望所有任务都被强制提交到 BlockingQueue 和执行器服务以仅从队列中轮询任务。
我将拥有自己的 BlockingQueue 实现,它将根据检查在 poll() 中提供项目(检查业务逻辑是否通过以处理任务),如果检查失败,则不会在 poll() 中提供项目.我相信,ThreadPoolExecutor 已经实现,假设 poll() 返回 null 不一定意味着队列为空。
我知道此模型存在问题。传统的 ThreadPoolExecutor 中的核心线程只有在任务通过其 execute() 方法提交给 executor 时才会创建。现在,如果我重写 execute() 方法以直接将任务排队到 BlockingQueue,它可能不会创建核心线程。我可以通过预先启动核心线程并将其设置为不超时来解决此问题,因此核心线程将始终处于活动状态。我还需要验证 num core threads 没有配置为 0。
这个模型行得通吗?我想处理一些案件吗? 你的想法。
【问题讨论】:
标签: java multithreading concurrency java.util.concurrent threadpoolexecutor