【Java并发编程】Executor Interfaces

总括

在java.util.concurrent包下,定义了三个Executor Interfaces。
1. Executor接口,一个简单的接口,支持启动一个新任务。
2. ExecutorService接口,继承了Executor接口,提供了管理任务和Executor本身生命周期的相关定义。
3. ScheduledExecutorService,继承了ExecutorService,提供了周期性执行任务的机制的接口的定义

Executor接口

public interface Executor {
    void execute(Runnable command);
}

Executor接口只有一个execute方法,该接口是设计来直接可以替换Thread的方式的。这里r为Runnable类,e为Executor接口的一个实例,具体是什么我们这里不关心。

(new Thread(r)).start();
e.execute(r);

可以看出,Executor的定义没有什么特别的。我们一定要明白一点,当我们最初使用Thread来执行一个Runnable任务时,Runnable本身和多线程一点关系都没有,它只是被Thread利用的一个接口而已,真正的具备线程的功能是Thread类。回过头来,我们再说Executor接口,这个接口就如同Runnable接口一样,并没有什么神奇之处,这个接口本身不是线程,而是线程利用的一个已知的接口而已。换句话说,如果Executor的实例实在哪一个线程中调用了execute方法,那么相应的任务就运行在那个线程。

ExecutorService接口

public interface ExecutorService extends Executor {
    void shutdown();

    List<Runnable> shutdownNow();

    boolean isShutdown();

    boolean isTerminated();

    boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;

    <T> Future<T> submit(Callable<T> task);

    <T> Future<T> submit(Runnable task, T result);

    Future<?> submit(Runnable task);

    ··· ···
}

ExecutorService提供了一种执行任务的新方式,submit方法接受一个Callable的实例,我们熟悉的Runnable接口中定义的方法run并不反回任何参数,而Callable接口中定义的方法call是有返回值的。submit方法返回值是Future接口,Future接口定义了任务调度的逻辑,和获取Callable对应执行结果的相关get方法。

ExecutorService提供了关闭Executor的方法,要想立刻关闭,所有的任务都要很好地处理中断操作。

ScheduledExecutorService接口

ScheduledExecutorService接口比ExecutorService提供了延迟和周期性反复执行任务的接口:scheduleAtFixedRate和scheduleWithFixedDelay。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值