zoukankan      html  css  js  c++  java
  • 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(源码)
  • 相关阅读:
    day02-html+css
    day01-html+css
    ES6-03 symbol数据类型,代理,遍历的使用
    ES6-02 新增方法及函数新增
    Java创建对象基础与修饰符整理
    python dataframe基于另一列提取对应列值
    Python .seq文件批量转.fas 并根据文件夹与文件名重命名
    Python 批量修改文件夹名称 (os.rename)
    Python 批量修改文件夹名称 (os.rename)
    R mgcv包参数 gam参数
  • 原文地址:https://www.cnblogs.com/longfurcat/p/9484108.html
Copyright © 2011-2022 走看看