传统的ThreadPoolExecutor仅在没有可用于传入任务的空闲核心线程时才使用提供的BlockingQueue对项目进行排队。如果存在空闲的核心线程,则执行程序会尝试直接为传入的任务分配线程。
我想要一个稍微不同的行为。我希望将所有任务强制提交给BlockingQueue和执行器服务,以便仅从队列中轮询任务。
我将拥有自己的BlockingQueue实现,它将基于检查提供poll()中的项目(检查业务逻辑传递以处理任务),如果检查失败,则不会在poll()中提供项目。我相信,ThreadPoolExecutor已经实现,假设poll()返回null并不一定意味着队列是空的。
我知道这个模型存在问题。只有在通过execute()方法将任务提交给执行程序时,才会创建传统ThreadPoolExecutor中的核心线程。现在,如果我覆盖execute()方法直接将任务排队到BlockingQueue,它可能不会创建Core线程。我可以通过PreStarting Core线程并将其设置为Timeout来解决这个问题,因此核心线程将永远存在。我还需要验证num核心线程没有配置为0。
这种模式会起作用吗?我错过了处理一些案件吗? 你的想法。
答案 0 :(得分:1)
如果我理解正确,你会将任务提交给某些ThreadPool,但你想选择是否真的根据某些逻辑处理这些任务?在那种情况下:
return
- 这将为检查逻辑提供多线程。