1

在配置了 core、max、timeout、time unit 和 bounded queue 的ThreadPoolExecutor上调用invokeAllinvokeAny并在其调用中指定超时长度和单位,是否会在执行任务时覆盖 executor 的超时设置?在 invokeAll 的情况下,这将适用于对返回的期货之一使用get方法(您可以在 get 上指定额外的超时)。对于invokeAny,它适用于调用本身。

ExecutorService threadPool = new ThreadPoolExecutor(coreSize, maxSize, poolTO, tu, new ArrayBlockingQueue<Runnable>(queueSize));

...并且在包含此 threadPool 对象的类中,我公开了 submit、invokeAll 和 invokeAny,对于后两者,我不公开超时设置,因为我选择使用用于构造 threadPool 的相同设置. 我问这个问题,如果在我的小单例代理包装类中公开这些会覆盖上面构造函数中定义的超时设置。

4

1 回答 1

1

ThreadPoolExecutor 超时实际上是一个保活值,它用于在将池收缩回核心大小之前等待 TimeUnit 的长度,而 invokeAll 和 invokeAny 超时是在失败之前等待这些方法中的执行发生多长时间。

于 2013-08-28T01:55:20.523 回答