码迷,mamicode.com
首页 > 其他好文 > 详细

Executor框架(五)Executors工厂类

时间:2018-03-01 21:41:39      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:efault   size   RKE   工厂方法   cto   最简   service   cep   sync   

Executors 简介

Executors 是一个工厂类,其提供的是Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的实例的工厂方法;

  • 提供常用配置的 ExecutorService、ScheduledExecutorService的实现方法;
  • 创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。
  • 将其他非Callable接口的其他类对象,封装成Callable,从而用于默些方法;

1. 封装非Callable对象

public static Callable<Object> callable(Runnable task):
返回 Callable 对象,调用它时可运行给定的任务并返回 null。
static <T> Callable<T> callable(Runnable task, T result):
返回 Callable 对象,调用它时可运行给定的任务并返回给定的结果。这在把需要 Callable 的方法应用到其他无结果的操作时很有用。
public static Callable<Object> callable(PrivilegedAction<?> action):
返回 Callable 对象,调用它时可运行给定特权的操作并返回其结果。
public static Callable<Object> callable(PrivilegedExceptionAction<?> action):
返回 Callable 对象,调用它时可运行给定特权的异常操作并返回其结果。
public static <T> Callable<T> privilegedCallable(Callable<T> callable):
返回 Callable 对象,调用它时可在当前的访问控制上下文中执行给定的 callable 对象。
public static <T> Callable<T> privilegedCallableUsingCurrentClassLoader(Callable<T> callable):
返回 Callable 对象,调用它时可在当前的访问控制上下文中,使用当前上下文类加载器作为上下文类加载器来执行给定的 callable 对象。

2. 创建并返回ExecutServic的常用配置实例对象

public static ExecutorService newSingleThreadExecutor():
创建一个使用单个 worker 线程的 Executor,以 无界队列 方式来运行该线程。如果这个线程死了,那么将会自动创建一个新的线程,继续完成任务。与其他等效的 newFixedThreadPool(1, threadFactory) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory):
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程,并在需要时使用提供的 ThreadFactory 创建新线程。其余同上。
public static ExecutorService newFixedThreadPool(int nThreads):
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。
public static ExecutorService newFixedThreadPool(int nThreads,ThreadFactory threadFactory): 同上;
public static ExecutorService newCachedThreadPool():
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory):
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。缓存线程的任务队列是SynchronousQueue,而fix、single线程池则用的是无边界的LinkedBlockingQueue。
public static ExecutorService unconfigurableExecutorService(ExecutorService executor):
返回一个将所有已定义的 ExecutorService 方法委托给指定执行程序的对象,但是使用强制转换可能无法访问其他方法。这提供了一种可安全地“冻结”配置并且不允许调整给定具体实现的方法。

3. 创建并返回ScheduledExecutServic的常用配置实例对象

public static ScheduledExecutorService newSingleThreadScheduledExecutor():
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。(线程终止了,也会自动重新创建,与上同)。与其他等效的 newFixedThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory):
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。其余同上。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize):
创建一个固定数量的线程池,它可安排在给定延迟后运行命令或者定期地执行
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize,ThreadFactory threadFactory):
同上;
public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor):
返回一个将所有已定义的 ExecutorService 方法委托给指定执行程序的对象,但是使用强制转换可能无法访问其他方法。这提供了一种可安全地“冻结”配置并且不允许调整给定具体实现的方法。

4. 返回ThreadFactory

public static ThreadFactory defaultThreadFactory():
返回用于创建新线程的默认线程工厂;
public static ThreadFactory privilegedThreadFactory():
返回用于创建新线程的线程工厂,这些新线程与当前线程具有相同的权限。

ThreadFactory 接口

只有一个方法:
Thread newThread(Runnable r):
构造一个新 Thread。实现也可能初始化属性、名称、守护程序状态、ThreadGroup 等等。

此接口最简单的实现就是:

 class SimpleThreadFactory implements ThreadFactory {
   public Thread newThread(Runnable r) {
     return new Thread(r);
   }
 }

Executor框架(五)Executors工厂类

标签:efault   size   RKE   工厂方法   cto   最简   service   cep   sync   

原文地址:https://www.cnblogs.com/jinggod/p/8490243.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!