Executor简介

    Executor是一个接口,这个接口负责执行提交给它的任务(Runnable对象)。这个接口能够使“任务提交”与“任务执行”解耦。即某人只要把任务提交给Executor就好了,至于它怎么给任务分配线程去执行,你就不用管了。
 注:
  ①任务执行包括线程的如何使用,如何调度等等。
       ②一般情况下,会选择使用Executor,而不是直接创建Thread。
 
    比如,你不会每次都这样写:
  
  new Thread(new (RunnableTask())).start();

 

    而是:
    
Executor executor = anExecutor;
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());

 

 
    但是,Executor接口并不严格要求执行操作是异步的。在最简单的实现例子中,一个执行器,可以直接在调用所在的线程上运行提交的任务,如下所示,如果main线程给这个DirectExecutor提交了一个任务,那么执行这个任务的还是main线程。因为它没有单独创建线程。
    
class DirectExecutor implements Executor {
        public void execute(Runnable r) {
            r.run();
        }
}

 

   
    更典型的是,提交的任务将被非调用线程的其他线程所执行。下面这个执行器就为每个任务产生一个新的线程。
  
  class ThreadPerTaskExecutor implements Executor {
        public void execute(Runnable r) {
            new Thread(r).start();
        }
    }

 

    
    一些Executor实现,对任务如何以及何时被安排强加了一些限制。下面的这个执行器序列化了任务的提交给第二个执行器。形成一个复合的executor.
 
Executor.java(源码)

 

posted @   猫毛·波拿巴  阅读(544)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示