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框架集的核心类图如下: 从上往下,可以很清 ...
随机推荐
-
Java Class.cast方法
1.Java api public T cast(Object obj); Casts an object to the class or interface represented 解释的比较笼统, ...
-
[LeetCode]题解(python):048-Rotate Image
题目来源 https://leetcode.com/problems/rotate-image/ You are given an n x n 2D matrix representing an im ...
-
PHP函数——urlencode() 函数
urlencode($str)的作用是对字符串$str进行url编码,方便$str作为一个变量传递给下一页,一般情况下$str有两种, 第一种是数组类型,如果想将数组作为url的一个参数,即必须将数组 ...
-
Exif的Orientation信息说明
EXIF Orientation 参数让你随便照像但都可以看到正确方向的照片而无需手动旋转(前提要图片浏览器支持,Windows 自带的不支持) 这个参数在佳能.尼康相机照的照片是自带的,但我的奥林巴 ...
-
string.Join和string.Concat的区别
源自Difference between String.Join() vs String.Concat() With .NET 4.0, String.Join() uses StringBuilde ...
-
Unix C++(boost) 线程同步和线程组
#include <boost/thread.hpp> #include <iostream> #include <vector> #include <cst ...
-
Python自然语言处理学习笔记之信息提取步骤&;分块(chunking)
一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...
-
类似智能购票的demo--进入页面后默认焦点在第一个输入框,输入内容、回车、right时焦点自动跳到下一个,当跳到select时,下拉选项自动弹出,并且可以按上下键选择,选择完成后再跳到下一个。
要实现的效果:进入页面后默认焦点在第一个输入框,输入内容.回车.right时焦点自动跳到下一个,当跳到select时,下拉选项自动弹出,并且可以按上下键选择,选择完成后再跳到下一个. PS:自己模拟的 ...
-
IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
-
python写一个邮箱伪造脚本
前言: 原本打算学php MVC的思路然后写一个项目.但是贼恶心, 写不出来.然后就还是用python写了个邮箱伪造. 0x01 第一步先去搜狐注册一个邮箱 然后,点开设置,开启SMTP服务. 当然你 ...