创建的ScheduledThreadPoolExecutor使用Executors(Creating

2019-09-16 14:19发布

我,为什么下面投不工作极其混乱:

ScheduledThreadPoolExecutor timeoutControl = (ScheduledThreadPoolExecutor) Executors.newSingleThreadScheduledExecutor();

的ScheduledThreadPoolExecutor实现了ScheduledExecutorService的。 这是什么执行人点打电话,如果我不能以实际的课堂上使用它。

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

Answer 1:

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

源代码的Executors类:

public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
}

Delegated...类(有一个DelegatedExecutorService太)只是过客所有调用底层的执行者,在ScheduledThreadPoolExecutor在这种情况下。 在代码中的注释表明,这些类的整点是隐藏所有底层执行者可能具有非接口方法。

在任何情况下,更好的做法反正使用的接口,而不是对象的类版本你正在工作( List而不是ArrayListScheduledExecutorService ,而不是ScheduledThreadPoolExecutor )。

如果你绝对需要的可用功能ScheduledThreadPoolExecutor ,而不是在ScheduledExecutorService ,你可以使用的构造函数ScheduledThreadPoolExecutor创建它的一个实例。



Answer 2:

您应该只使用所返回的执行作为ScheduledExecutorService ,而不是将其强制转换为ScheduledThreadPoolExecutor

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();


Answer 3:

为了简化:

实现一个接口的类可以有其他的方法和字段,界面没有。 在这种情况下,该方法返回的接口,所以你不能这样垂头丧气实现类。



文章来源: Creating ScheduledThreadPoolExecutor Using Executors