实例化ExecutorService?

时间:2017-06-27 12:16:19

标签: java multithreading executorservice

我读到一个人无法在Java中创建接口实例,但在以下代码中,Executors.newSingleThreadExecutor()返回ExecutorService实例,尽管ExecutorService是一个接口:< / p>

//WorkerThread is a class that implements Runnable
WorkerThread worker = new WorkerThread();
Executor exec=Executors.newSingleThreadExecutor();
exec.execute(worker);

3 个答案:

答案 0 :(得分:0)

您无法创建接口的实例,但您当然可以创建实现该接口的类的实例。

Executors.newSingleThreadExecutor()返回类FinalizableDelegatedExecutorService的实例,该实例实现ExecutorService接口。

public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

答案 1 :(得分:0)

当一个类实现某个接口时,它可以被实例化为该接口。

interface TheInterface {}
class Test implements TheInterface {}

...

TheInterface test = new Test();

答案 2 :(得分:0)

ExecutorService是一个接口并扩展Executor,这也是一个暴露某些方法的接口。举个例子,你可以在调用Executors.newSingleThreadExecutor()时返回它的实例实现Executor的ThreadPoolExecutor,你可以写。

Executor executor=Executors.newSingleThreadExecutor();

并且您只能调用Executor接口上可用的方法,即该接口上的execute(Runnable command)

对于无法使用界面

直接创建的界面
Executor executor =new  Executor();//Not possible 

最佳做法请参考使用界面,以便您可以在不更改代码的情况下更改实施