使用执行器创建 ScheduledThreadPoolExecutor

Con*_*tin 3 java java.util.concurrent

我非常困惑为什么以下演员不起作用:

ScheduledThreadPoolExecutor timeoutControl = (ScheduledThreadPoolExecutor) Executors.newSingleThreadScheduledExecutor();
Run Code Online (Sandbox Code Playgroud)

ScheduledThreadPoolExecutor 实现 ScheduledExecutorService。如果我不能在实际的类中使用它,那么这个 Executors 调用有什么意义呢?

我使用它是否错误(可能),有人可以提供一些指导吗?

tru*_*ity 5

问题是Executors.newSingleThreadScheduledExecutor();实际上不返回ScheduledThreadPoolExecutor.

类中的源代码Executors

public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
}
Run Code Online (Sandbox Code Playgroud)

这些Delegated...类(也有一个DelegatedExecutorService)只是将所有调用传递给底层执行器,ScheduledThreadPoolExecutor在本例中是 。代码中的注释表明这些类的全部目的是隐藏底层执行器可能具有的所有非接口方法。

无论如何,最好的做法是使用接口而不是您正在处理的对象的类版本(List而不是ArrayListScheduledExecutorService并且不是ScheduledThreadPoolExecutor)。

如果您绝对需要 中可用ScheduledThreadPoolExecutor而不是 中的功能ScheduledExecutorService,则可以使用 的构造函数ScheduledThreadPoolExecutor来创建它的实例。