可调整大小的ListeningExecutorService

时间:2012-04-19 17:40:43

标签: java guava executorservice

我养成了将ExecutorService包裹在listeningDecorator中以制作ListeningExecutorService的习惯。我理解这是番石榴团队的推荐,似乎总是值得的。

然而,我在这里遇到了一个问题。我的执行程序基于标准ThreadPoolExecutor是不变的,我想将该线程池大小的控制权交给我的应用程序(特别是,将它暴露给支持该应用程序的管理员)。使用未修饰的ThreadPoolExecutor时,需要执行此操作所需的方法,但包装器会将代理隐藏起来。

那么,我需要做些什么才能回到ThreadPoolExecutor公开的api而不放弃listeningDecorator

我有几个想法:

  1. 制作一个公开委托的新ListeningDecorator
  2. 保留对代理人以及装饰Executor
  3. 的引用
  4. 仅保留对ThreadPoolExecutor的引用,并仅在请求ExecutorService时将其换行
  5. 反思我的代理方式并从那里操作线程池大小

1 个答案:

答案 0 :(得分:2)

番石榴团队成员。

我会编写一个新的ListeningThreadPoolExecutor类,它基本上是一个ListeningDecorator变体包装ThreadPoolExecutor,但不是公开委托本身,而是公开setCorePoolSize(int size)方法转发给代理人ListeningThreadPoolExecutor的{​​{1}}。

与方法1相比,这种方法暴露的内部细节更少,但如果不这样做,我会按照你的描述回到选项1。