Executors浅析

依然范特西╮ 提交于 2020-03-02 02:59:51

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

 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秒钟还未使用则会从缓存中删除。

 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。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!