它是否正确?

ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)
                                        Executors.newFixedThreadPool(numThreads);


我这样做是因为如果进行类型转换,我将可以访问getActiveCount()getQueue()方法。 Eclipse在这里没有标记任何错误,但是我想确保自己在做的是正确的。

实际上,这很奇怪,因为ThreadPoolExecutor implements ExecutorService并且我正在将ExecutorService强制转换为ThreadPoolExecutor

最佳答案

尽管由于他所说的原因我通常会同意@Evgeniy,但实际上在这种情况下还可以,因为ThreadPoolExecutor的Javadoc特别建议使用工厂方法来创建实例。

我认为这是这些方法将返回预期的ThreadPoolExecutor的合同义务。我不会依赖于源代码,因为它会随着时间而变化,但是javadoc中的明确建议应该是可靠的。

从ThreadPoolExecutor的javadoc


  为了在广泛的上下文中有用,该类提供了许多可调整的参数和可扩展性挂钩。但是,敦促程序员使用更方便的Executors工厂方法Executors.newCachedThreadPool()(无边界线程池,具有自动线程回收),Executors.newFixedThreadPool(int)(固定大小的线程池)和Executors.newSingleThreadExecutor()(单个背景)线程),可以针对最常见的使用情况预先配置设置。否则,在手动配置和调整此类时,请使用以下指南:

10-04 11:36
查看更多