ThreadPoolExecutor 是否应用模板模式?

Does the ThreadPoolExecutor Apply the Template Pattern?

ThreadPoolExecutor 中有 2 个 hook 方法

这个技巧让我想到了模板方法模式,其中有hook方法abstract class 中。但是,模板方法抽象class中的钩子方法确实与模板方法不同ThreadPoolExecutor 中的:

所以我的问题是:

  • ThreadPoolExecutor是否完全属于模板方法模式
  • 钩子方法本身。来自模板方法模式的独立技术

就我个人而言,我会说 yes,因为 ThreadPoolExecutor 预定义了一组在 subclassing 时不能更改的命令,因为它被标记为 final。参见 #runWorker。 这是模板:第一个 beforeExecute,第二个 task.run,第三个 afterExecute.

final void runWorker(Worker w) {
  // ... snip
     beforeExecute(wt, task);
     try {
           task.run();
     } 
     ...
     } finally {
        afterExecute(task, thrown);
     }

   // ... snip
} 

它将部分实现留给子class、beforeExecuteafterExecute

但是,是的,我知道可以进行讨论,因为在这种情况下 class 只有挂钩(未标记为抽象,因此允许但不是要求)来控制子 classes .