美文网首页
Executor 框架简介

Executor 框架简介

作者: 一路花开_8fab | 来源:发表于2018-09-16 17:10 被阅读0次

    Executor 框架见下图:

    image.png

    Executor

    Executor是一个基础的接口,其初衷是将任务提交和任务执行细节解耦,下面展示的是其定义的唯一方法。

    public interface Executor {
    
        /**
         * Executes the given command at some time in the future.  The command
         * may execute in a new thread, in a pooled thread, or in the calling
         * thread, at the discretion of the {@code Executor} implementation.
         *
         * @param command the runnable task
         * @throws RejectedExecutionException if this task cannot be
         * accepted for execution
         * @throws NullPointerException if command is null
         */
        void execute(Runnable command);
    }
    

    ExecutorService

    ExecutorService则更加完善,不仅提供生命周期管理的方法,如shutdown等,也提供了更加全面的提交任务机制,如返回Future而不是void的submit方法。

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

    java标准类库提供了几种基础实现,比如ThreadPoolExecutor、ScheduledThreadPoolExecutor ForkJoinPool。这些线程池的设计特点在于其高度的可调节性和灵活性,以尽量满足复杂多变的实际应用场景。

    Executors

    从简化使用的角度,为我们提供了各种方便的静态工厂方法。常见的几个方法如下:

    1. newFixedThreadPool(int nThreads),重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列
     public static ExecutorService newFixedThreadPool(int nThreads) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                          0L, TimeUnit.MILLISECONDS,
                                          new LinkedBlockingQueue<Runnable>());
        }
    
    1. newSingleThreadExecutor(),它的特点在于工作线程数目被限制为1,操作一个无界的工作队列
      public static ExecutorService newSingleThreadExecutor() {
            return new FinalizableDelegatedExecutorService
                (new ThreadPoolExecutor(1, 1,
                                        0L, TimeUnit.MILLISECONDS,
                                        new LinkedBlockingQueue<Runnable>()));
        }
    

    3.newCachedThreadPool(),它是一种用来处理大量短时间工作任务的线程池,它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程

     public static ExecutorService newCachedThreadPool() {
            return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                          60L, TimeUnit.SECONDS,
                                          new SynchronousQueue<Runnable>());
        }
    

    相关文章

      网友评论

          本文标题:Executor 框架简介

          本文链接:https://www.haomeiwen.com/subject/drlfnftx.html