我已经养成了将ExecutorService
s 包裹在 alisteningDecorator
中来制作 a的习惯ListeningExecutorService
。我知道这是 Guava 团队的建议,而且似乎总是值得的。
但是,我在这里遇到了一个问题。我的 executors 基于标准是不变的ThreadPoolExecutor
,我想将线程池大小的控制权交给我的应用程序(特别是向支持该应用程序的管理员公开)。使用 undecorated ThreadPoolExecutor
,执行此操作所需的方法被公开,但包装器对我隐藏了委托。
那么,我需要做什么才能在ThreadPoolExecutor
不放弃的情况下回到 api 暴露的 api listeningDecorator
?
我有几个想法是:
ListeningDecorator
创建一个暴露委托的新的- 保留对代表以及装饰的参考
Executor
- 仅保留对 的引用,并仅在请求
ThreadPoolExecutor
时包装它ExecutorService
- 将我的方式反映给委托并从那里操作线程池大小