Apache引入了一个名为WaterMarkExecutor的新线程池,该线程池扩展了ThreadPoolExecutor。但是我不明白WaterMarkExecutor的动机。为什么需要它?和ThreadPoolExecutor相比有什么优势?

最佳答案

documentation似乎暗示水印在队列大小上。如果队列达到一定大小,将添加更多线程,直到最大线程数为止。这与普通执行程序不同,普通执行程序在使用所有其他线程后立即开始添加线程。

如果您只想创建更多线程,并在一定数量的任务排队后可能会增加系统负载,这将很有用。这是系统负载和队列清除速度之间的平衡行为。


  在此执行程序中,所有核心池线程均已排队后使用
  直到水印出现。如果之后提交了更多任务
  队列中的水印已满,线程数
  增加到最大如果任务数量继续增加
  队列开始填满。如果队列是有界队列而队列
  如果一个被完全填充,则执行RejectedExecutionHandler
  指定。否则,任务将被拒绝。

07-25 23:45