Лично я бы сказал да , потому что ThreadPoolExecutor предопределяет набор команд, которые не могут быть изменены при создании подклассов, так как он помечен как final
.Смотри #runWorker
.Это шаблон: первый beforeExecute
, второй task.run
, третий afterExecute
.
final void runWorker(Worker w) {
// ... snip
beforeExecute(wt, task);
try {
task.run();
}
...
} finally {
afterExecute(task, thrown);
}
// ... snip
}
Он оставляет некоторые части реализации подклассу beforeExecute
, afterExecute
.
Но да, я знаю, что может быть обсуждение, так как в этом случае у класса есть только хуки (не помеченные как абстрактные, поэтому разрешенные, но не обязательные) для управления подклассами.