java - 在此示例代码中怎么可能实例化接口(interface)?

标签 java multithreading concurrency

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

下面是示例代码:

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();
    }
}

最佳答案

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

根据 GrepCode:

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

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

关于java - 在此示例代码中怎么可能实例化接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322856/

相关文章:

java - 从子类返回数据

Java 错误双重释放或损坏(内存)

python WSME 和线程安全

java - Ratpack 的 Promise.cache 与 ParallelBatch 中的多个下游 promise

Java IO 线程安全

java - 为 XWiki 中的文档设置用户和组权限

java - 从 Java 中的 Amazon Access Key 获取用户名

java - 使数据结构线程安全的最有效方法(Java)

multithreading - boost asio 处理程序中的长时间运行/阻塞操作

java - 预订应用程序中的同步