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