关于Executor框架相关接口和类的作用

前言

最近看《JAVA并发编程实战》时,对Executor框架相关类和接口的作用不太明白。看了些资料,总结一下这些类的基本含义和功能。

正文

1,Executor接口
这个接口是这套体系结构的根接口,它只有一个方法,就是execute(Runnable command)。这个方法的作用是执行一个实现了Rannable接口的任务(也就是我们的业务逻辑)。
做这个接口的初衷,是想把任务和“任务的运行方法(是怎样运行的)”、“线程的使用”、“线程的调度”分离开来(也就是解耦)。原来的使用方式如下:

new Thread(new(RunnableTask())).start()

新的使用方式:

// anExecutor是一个Executor的Executor实例
Executor executor = anExecutor;
// execute方法代表运行一个任务,但如何运行(同步、异步还是其它方式),还要看execute方法的实现方式
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());


2,ExecutorService接口
ExecutorService接口继承了Executor接口,并在Executor接口的基础上,提供了一些方法,来管理“任务的执行方式”、查看“任务的状态”和管理“执行任务的容器”(在这个体系结构中,任务基础都是在一个“容器”内执行,而这个容器就是一个线程池(ThreadPoolExecutor))。例如:

  • <T> Future<T> submit(Callable<T> task):执行一个Callable任务,并返回Future对象。可以通过这个Future对象来“取得任务结果”,“取消任务”等。
  • Future<?> submit(Runnable task):执行一个Runnable任务。
  • void shutdown():关闭服务,一直等到所有正在执行的任务执行完。新的任务不再被接受。
  • boolean awaitTermination(long timeout, TimeUnit unit):阻塞当前线程,直到以下条件之一:
    • Shutdown方法被调用,所有任务都执行完。
    • 发生Timeout
    • 当前线程被中断(interrupt)


3,ThreadPoolExecutor
ThreadPoolExecutor是ExecutorService的一个实现。使用池化的线程,执行用户提交的任务。通常,使用Executors的工厂方法来创建ThreadPoolExecutor。


4,Executors
这个类就像Collections类一样,是一个工具类。它提供工具方法和工厂方法为下面的这些类:

  • Executor
  • ExecutorService
  • ScheduledExecutorService
  • ThreadFactory
  • Callable


5,Callable、Future和FutureTask
关于Callable、Future和FutureTask,请参看:Java并发编程:Callable、Future和FutureTask

参考:
Executor Interfaces
并发新特性—Executor 框架与线程池
Java并发编程:Callable、Future和FutureTask
Javadoc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值