如何在此示例代码中实例化接口?

时间:2014-12-05 18:59:46

标签: java multithreading concurrency

我阅读的手册中包含此示例,其中正在创建ScheduledExecutorService。但是,API显示ScheduledExecutorService是一个接口,而不是一个类。那它怎么可能被实例化呢?

以下是示例代码:

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import static java.util.concurrent.TimeUnit.*;

class BeeperControl {
    private final ScheduledExecutorService scheduler =
    Executors.newScheduledThreadPool(1);

    public void beepForAMinute() {
        final Runnable beeper = new Runnable() {
            public void run() {
                System.out.println("beep");
            }
        };

        final ScheduledFuture<?> future =
            scheduler.scheduleAtFixedRate(beeper, 250, 250, MILLISECONDS);
            scheduler.schedule(
            new Runnable() {
                public void run(){
                future.cancel(true);
                }
            }, 3, SECONDS );
        while (!future.isDone()) {
            try {
                Thread.sleep(10);
            } catch(InterruptedException e) {}
        }
        scheduler.shutdown();
    }

    public static void main(String[] args)
    {
        BeeperControl bc = new
        BeeperControl();
        bc.beepForAMinute();
    }
}

1 个答案:

答案 0 :(得分:1)

Executors.newSceduledThreadPool(int)是一个工厂方法,它返回一个实现ScheduledExecutorService接口的类。

编辑:

根据GrepCode:

        public static ScheduledExecutorService newScheduledThreadPool(
                int corePoolSize, ThreadFactory threadFactory) {
            return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
        }

所以这里它返回实现ScheduledThreadPoolExecutor接口的ScheduledExecutorService的新实例。

相关问题