首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreadPoolExecutor应用模板模式吗?

ThreadPoolExecutor应用模板模式吗?
EN

Stack Overflow用户
提问于 2018-06-04 07:24:56
回答 1查看 36关注 0票数 0

ThreadPoolExecutor中有两个钩子方法。

这种技术让我想到了模板方法模式,其中abstract类中有钩子方法。但是,模板方法的抽象类中的钩子方法与ThreadPoolExecutor方法的不同之处在于:

  • ThreadPoolExecutor类是具体的,而在模板方法模式中定义钩子方法的类是abstract
  • 钩子方法(如beforeExecute(Thread t, Runnable r)afterExecute(Runnable r, Throwable t) )在ThreadPoolExecutor中是具体的空方法体,而模板方法模式中的abstract类中的钩子方法是abstract,尽管这两个钩子方法都是protected,表明它们在子类中应该是overridden

所以我的问题是:

  • ThreadPoolExecutor 是否属于模板方法 pattern?
  • 本身就是 hook方法。一种独立的技术来自模板方法 pattern
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 07:55:14

就我个人而言,我会说,因为ThreadPoolExecutor预先定义了一组命令,当子类标记为final时不能更改这些命令。见#runWorker。这是模板:第一个beforeExecute,第二个task.run,第三个afterExecute

代码语言:javascript
复制
final void runWorker(Worker w) {
  // ... snip
     beforeExecute(wt, task);
     try {
           task.run();
     } 
     ...
     } finally {
        afterExecute(task, thrown);
     }

   // ... snip
} 

它将实现的某些部分留给子类beforeExecuteafterExecute

但是是的,我知道可以进行讨论,因为在这种情况下,类只具有控制子类的钩子(不是标记为抽象的,而是不允许的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50675307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档