我养成了将ExecutorService
包裹在listeningDecorator
中以制作ListeningExecutorService
的习惯。我理解这是番石榴团队的推荐,似乎总是值得的。
然而,我在这里遇到了一个问题。我的执行程序基于标准ThreadPoolExecutor
是不变的,我想将该线程池大小的控制权交给我的应用程序(特别是,将它暴露给支持该应用程序的管理员)。使用未修饰的ThreadPoolExecutor
时,需要执行此操作所需的方法,但包装器会将代理隐藏起来。
那么,我需要做些什么才能回到ThreadPoolExecutor
公开的api而不放弃listeningDecorator
?
我有几个想法:
ListeningDecorator
Executor
ThreadPoolExecutor
的引用,并仅在请求ExecutorService
时将其换行答案 0 :(得分:2)
番石榴团队成员。
我会编写一个新的ListeningThreadPoolExecutor
类,它基本上是一个ListeningDecorator
变体包装ThreadPoolExecutor
,但不是公开委托本身,而是公开setCorePoolSize(int size)
方法转发给代理人ListeningThreadPoolExecutor
的{{1}}。
与方法1相比,这种方法暴露的内部细节更少,但如果不这样做,我会按照你的描述回到选项1。