Executor框架

 1、框架定义的接口

     Executor框架的接口主要由三个接口定义,Executor、ExecutorService和ScheduledExecutorService
     Executor是最上层接口,定义了一个Runnable的任务执行的接口 void execute(Runnable command);
     ExecutorService继承自Executor,在其基础上主要做了三方面的扩展:1、定义了检查和结束任务的接口;2、提供了返回Future对象的任务提交接口;3、提供了从任务集合中选取任务进行执行的接口。示例如下

void  shutdown();
List<Runnable> shutdownNow();
boolean  isShutdown();
boolean  isTerminated();
     
<T> Future<T> submit(Callable<T> task);
Future<?> submit(Runnable task);
<T> Future<T> submit(Runnable task, T result);

<T> List<Future<T>> invokeAll(Collection<?  extends  Callable<T>> tasks)  throws  InterruptedException;
<T> List<Future<T>> invokeAll(Collection<?  extends  Callable<T>> tasks, long  timeout, TimeUnit unit)  throws  InterruptedException;

ScheduledExecutorService继承自ExecutorService,在其基础上提供了任务执行调度相关的接口:指定延迟时间执行,或者指定间隔顺序执行。接口示例如下

public  <V> ScheduledFuture<V> schedule(Callable<V> callable, long  delay, TimeUnit unit);
public  ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long  initialDelay, long  period,  TimeUnit unit);
public  ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,   long  initialDelay, long  delay, TimeUnit unit);

2、返回结果接口定义组成

Executor各个任务提交接口的返回结果属于Future结果系统。
Future结果系统最上层由java.util.concurrent.Future接口来定义。在Future中定义了检查任务状态、获取任务执行结果,以及取消任务等相关功能接口。
boolean  isCancelled();
boolean  isDone();
V get()  throws  InterruptedException, ExecutionException;
boolean  cancel(  boolean  mayInterruptIfRunning);

Future下面的基本上可以分成两个方向:一般可执行的Futre任务,以及可调度的Future任务,对应的接口便是RunnableFutre和ScheduledFuture。当然也有同时支持这两个特性的接口,这里只是做一个模糊的分类方向说明。

以上就是Future返回结果系统的一个大致组成,详细的实习将通过FutureTask来进行说明。


3、框架的使用入口

使用Executor时,一般是使用java.util.concurrent包提供的Executors工具类作为入口来构造相应的Executor对象。可以把Executors看成Executor框架的构造工厂,它提供的方法示例如下

public  static  ExecutorService newFixedThreadPool( int  nThreads) {
         return  new  ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                       new  LinkedBlockingQueue<Runnable>());
    }

public  static  ScheduledExecutorService newSingleThreadScheduledExecutor() {
         return  new  DelegatedScheduledExecutorService
            (  new  ScheduledThreadPoolExecutor(1));
    }

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

public  static  ThreadFactory privilegedThreadFactory() {
         return  new  PrivilegedThreadFactory();
    }

Executors除了提供产生Executor框架接口对象以为,它自己本身也提供了提交任务的接口,可以省去调用者创建Executor对象的过程。相关的方法示例如下

public  static  <T> Callable<T> callable(Runnable task, T result) {
         if  (task ==  null )
             throw  new  NullPointerException();
         return  new  RunnableAdapter<T>(task, result);
    }


4、框架的实现

从Executors的方法上来看,Executor框架的实现主要为ThreadPoolExecutor和ScheduleThreadPoolExecutor。

详细的实现分析参见ThreadPoolExecutor实现分析和ScheduledThreadPoolExecutor实现分析。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值