我在ThreadPoolExecutor中观察到下面的空方法:
protected void beforeExecute(Thread t, Runnable r) { }
protected void afterExecute(Runnable r, Throwable t) { }
protected void terminated() { }
在文档中,它说我们可以在进程之前调用的子类或匿名内部类中覆盖这些方法,这意味着这些受保护的方法代表侦听器/观察者来通知池中的下一个进程。
我的问题是:
正常的 中促使Doug Lea使用这种方式的缺点是什么?
发布于 2018-06-10 01:49:18
如果您想公开对这三个事件的访问,那么为这三个事件创建一个侦听器将是一种更好的方法,因为它在类及其侦听器之间提供了更高程度的解耦。
使访问受保护意味着类和侦听器之间具有更高程度的亲和性:类的设计者最终会为侦听器创建一个受保护的RunnerListener
接口,在需要覆盖一个或两个方法时添加一个受保护的DefaultRunnerListener
实现,并为您添加一个受保护的方法来提供侦听器。由于对此类侦听器的访问也会受到保护,因此不能对其使用工厂方法。
考虑到所有这些,作者决定提供受保护的方法会更容易,而不是为不必要的解耦增加上面的复杂性。
https://stackoverflow.com/questions/50776916
复制相似问题