Executor框架(五)Executors工厂类
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工厂类的更多相关文章
- Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类
Executor(二)ThreadPoolExecutor.ScheduledThreadPoolExecutor 及 Executors 工厂类 Java 中的线程池类有两个,分别是:ThreadP ...
- 【Java 多线程】Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类
Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService.利用这两个类,可以创建 ...
- 聊聊高并发(四十四)解析java.util.concurrent各个组件(二十) Executors工厂类
Executor框架为了更方便使用,提供了Executors这个工厂类.通过一系列的静态工厂方法.能够高速地创建对应的Executor实例. 仅仅有一个nThreads參数的newFixedThrea ...
- Executors工厂类
newCachedThreadPool 重用之前的线程 适合执行许多短期异步任务的程序. 调用 execute() 将重用以前构造的线程 如果没有可用的线程,则创建一个新线程并添加到池中 默认为60s ...
- Java多线程学习(八)线程池与Executor 框架
目录 历史优质文章推荐: 目录: 一 使用线程池的好处 二 Executor 框架 2.1 简介 2.2 Executor 框架结构(主要由三大部分组成) 2.3 Executor 框架的使用示意图 ...
- JDK多任务执行框架(Executor框架)
Executor的常用方法 为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制.它们都在java.util.concurrent包中,是JDK开发包的核心. ...
- Executor框架(转)
摘要: Executor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相 ...
- Java 线程池 Executor 框架
在Java中,可以通过new Thread 的方法来创建一个新的线程执行任务,但是线程的创建是非常耗时的,而且创建出来的新的线程都各自运行.缺乏统一的管理,这样的后果是可能导致创建过多的线程从而过度消 ...
- Java并发编程-Executor框架集
Executor框架集对线程调度进行了封装,将任务提交和任务执行解耦. 它提供了线程生命周期调度的所有方法,大大简化了线程调度和同步的门槛. Executor框架集的核心类图如下: 从上往下,可以很清 ...
随机推荐
- shell 脚本实战笔记(7)--集群网络相关知识和环境搭建
前言: 对网络相关的知识, 做下笔记. 包括IP地址A/B/C的分类, 静态地址的配置/DNS配置, 以及网卡相关信息查看. *) A/B/C/D类网络地址的划分 IP地址=网络地址+主机地址 或 I ...
- netscope-支持caffe的在线可视化工具-转载
Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,地址是here,可以用来可视化Caffe结构里prototxt格式的网络结构. Netscope使用起来也非常简单,打开这 ...
- Centos(linux)下的Python
Centos(linux)下安装python3(python2和python3共存) yum -y install lrzsz 首先安装lrzsz工具,lrzsz是一款在linux里可代替ftp上传和 ...
- C语言运算符优先级和ASCII表
1. C语言运算符优先级及结合性 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成 ...
- No result defined for action com.nynt.action.ManageAction and result input问题
No result defined for action com.nynt.action.ManageAction and result input 问题原因: 1). 在action类中定义的一个r ...
- ARP命令详解
ARP是一个重要的TCP/IP协议,并且用于确定对应IP地址的网卡物理地址.实用arp命令,我们能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容.此外,使用arp命令,也可以用人工方式输入 ...
- bootstrap modal模态框的运用
http://www.ziqiangxuetang.com/bootstrap/bootstrap-modal-plugin.html 方法 下面是一些可与 modal() 一起使用的有用的方法. 方 ...
- Javascript 严格模式下几个禁忌
禁止使用未声明的变量. 禁止删除变量或对象 禁止删除函数 禁止使用八进制 禁止对只读属性赋值 禁止对一个使用getter方法读取的属性进行赋值 禁止删除一个不允许删除的属性 变量名禁止使用 " ...
- 【转】每天一个linux命令(11):nl命令
原文网址:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件 ...
- Yarn、MapReduce、spark、storm的关系
YARN并不是下一代 MapReduce (MRv2),下一代 MapReduce 与第一代 MapReduce (MRv1)在编程接口.数据处理引擎(MapTask和ReduceTask)是完全一样 ...