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框架集的核心类图如下: 从上往下,可以很清 ...
随机推荐
- WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable(spark加载hadoop本地库的时候出现不能加载的情况要怎么解决呢?)
原文地址: https://www.zhihu.com/question/23974067/answer/26267153 原文内容: 我64位机器,当时hadoop启动的时候出现这个问题是因为had ...
- php中弱语言类型的底层实现
PHP是弱语言类型,主要分为三类: 1.标量类型:integer.string.float.boolean 2.复合类型:array.object 3.特殊类型:resource.null php是通 ...
- python可视化爬虫实现“京东试用”批量申请
介绍: 环境:chromedriver 2.41.578700+ selenuim3.14.0 过程: 1.打开京东主页 2.登录京东 3.打开京东试用页面 4.获取商品列表 5.自动申请试用(该商品 ...
- 自己一下午练习Js的代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- sys目录下常用文件汇总
1. /sys/kernel/debug/gpio 可以实时反馈系统中感兴趣的gpio引脚的状态 root@g6s:/sys/kernel/debug# cat gpio gpiochip7: GPI ...
- ory Oathkeeper Ecosystem
ory Oathkeeper 生态包含的组件 ORY Hydra is an OAuth 2.0 and OpenID Connect provider. ORY Oathkeeper is an I ...
- postman 中 form-data、x-www-form-urlencoded、raw、binary的区别
区别 form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件 ...
- Django Admin 时间格式化
http://961911.blog.51cto.com/951911/1557218 修改settings.py,添加一下内容: USE_L10N = False DATETIME_FORMAT = ...
- base64编码的原理及实现
base64编码的原理及实现 我们的图片大部分都是可以转换成base64编码的data:image. 这个在将canvas保存为img的时候尤其有用.虽然除ie外,大部分现代浏览器都已经支持原生的基于 ...
- bzoj 2784 [JLOI2012]时间流逝——树上高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2784 一个状态可以加很多个能量圈,但减少能量圈的情况只有一种.所以可以用树来刻画. 然后就变 ...