Executors浅析

#简述 Executors是一个工厂类,是ExecutorService的实用方法。他可以产生ExecutorService、ScheduledExecutorService、ThreadFactory和Callable实例。 #方法介绍java

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

建立一个线程数固定的可复用线程池。该线程池包含一个无界共享队列。线程池中有固定的活跃线城处理任务,若是多余的任务进入则放置到无界共享队列中去等待有线程空余。若是有任何一个线程在线程池关闭以前执行任务的过程当中失败而被终止,则新的线程将要代替它执行子任务。线程池里面的线程在线程池被关闭以前一直存活。缓存

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

和上一个不一样的是,构造方法新加了一个线程工厂。该工厂可以在必要的时候为线程池新增线程。异步

public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }
     static class FinalizableDelegatedExecutorService
        extends DelegatedExecutorService {
        FinalizableDelegatedExecutorService(ExecutorService executor) {
            super(executor);
        }
        protected void finalize() {
            super.shutdown();
        }
    }

建立一个单线程的线程池。该方法返回了一个FinalizableDelegatedExecutorService实例,FinalizableDelegatedExecutorService类是ExecutorService的包装类。性能

public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>(),
                                    threadFactory));
    }

也是一个单线程池,返回了包装类,拒绝修改线程池信息,而且放置了一个线程工厂类,能够在适当的时候新生成一个线程(好比之前的那个线程因为异常情况被关闭)。线程

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

建立一个线程池,线程池中建立须要的线程。任务能够复用以前建立的线程。该线程池可以经过执行许多生命周期段的异步任务来提升程序性能。在调用execute方法的过程当中会复用以前建立的可用线程。若是没有线程可用,线程池会新建立线程并添加到线程池中,若是线程超过60秒钟还未使用则会从缓存中删除。code

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

建立了一个单线程执行周期性任务。返回包装器类,不可改变线程池信息。生命周期

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

和上面的方法相似,不一样的是指定了建立新线程的工厂实例。队列

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

建立执行周期任务的线程池,线程池中的线程数为corePoolSize。it

相关文章
相关标签/搜索