java - 可调整大小的 ListeningExecutorService

标签 java guava executorservice

我已经养成了包裹ExecutorService的习惯位于 listeningDecorator制作 ListeningExecutorService 。我知道这是 Guava 团队的建议,而且似乎总是值得的。

但是,我在这里遇到了一个问题。我的执行者基于标准 ThreadPoolExecutor 不变,并且我想将该线程池大小的控制权交给我的应用程序(特别是,将其公开给支持该应用程序的管理员)。带有未装饰的ThreadPoolExecutor ,执行此操作所需的方法已公开,但包装器向我隐藏了委托(delegate)。

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

我的一些想法是:

  1. 新建 ListeningDecorator公开委托(delegate)
  2. 保留对委托(delegate)以及修饰的 Executor 的引用
  3. 仅保留对 ThreadPoolExecutor 的引用,并且仅当 ExecutorService 时才将其包裹起来按照要求
  4. 反射(reflect)我进入委托(delegate)的方式并从那里操纵线程池大小

最佳答案

这里是 Guava 团队成员。

我会编写一个新的 ListeningThreadPoolExecutor 类,它基本上是包装 ThreadPoolExecutorListeningDecorator 变体,但我不会公开委托(delegate)本身,而是' d 从转发到委托(delegate) ThreadPoolExecutorListeningThreadPoolExecutor 公开 setCorePoolSize(int size) 方法。

这种方法暴露的内部细节比选项 1 还要少,但如果做不到这一点,我会退回到您所描述的选项 1。

关于java - 可调整大小的 ListeningExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233689/

相关文章:

java - 依次执行一个线程

java - 在模拟器中加载插页式广告时出现 AdMob 错误

java - 如何在 Spring Boot 中将自定义 AbstractHealthIndicator 设置为不敏感,以便显示 for/health 端点?

java - 为什么在 java 中使用 ExecutorService 在 exec.shutdown() 之前使用 exec.isTermminate() ?

Java Multimap get 方法是否创建临时列表的动态分配?

java - 使用单独的开始/结束字符连接字符串

java - 如何处理不可中断阻塞(ExecutorService)

java - 使日志消息在 Java GoogleAppEngine 开发服务器上可见(与 GWT 一起使用)

java - 如何键入字符串以结束 Java 中的整数扫描过程

java - 从 Guava ImmutableTable 派生的 View 的迭代顺序