java Executor
Executor框架是java 5 中引入的,内部使用了线程池机制。Executor框架包括:Executor, ExecutorService,Executors,ThreadPoolExecutor等。
Executor ——接口
public interface Executor {
void execute (Runnable command);
}
Executor接口中定义一个方法execute(Runnable command),该方法接收一个Runnable实例,它用来执行一个任务,任务即是一个实现了Runnable接口的类。
ExecutorService——接口
public interface ExecutorService extends Executor {
void shutdown();
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
boolean awaitTermination(long timeout, TimeUnit unit)
throw InterruptedException;
//...其他用于提交的便利方法
}
ExecutorService继承了Executor的接口,同时提供了更丰富的生命周期管理的方法。ExecutorService的生命周期有3种状态:运行、关闭和已停止。
shutdown方法将执行平缓的关闭过程:不再接受新的任务,同时等待已经提交的任务执行完成——包括哪些还未开始执行的任务。
shutdownNow方法将执行粗暴的关闭过程:它将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。
Executors提供工厂方法用于创建线程池
newFixedThreadPool:将创建固定长度的线程池,每提交一个任务就创建一个线程,直到达到线程池的最大数量。(如果某个线程由于发生了未预期的Exception而结束,那么线程池会补充一个新的线程)。
newCachedThreadPool:创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模不存在任何限制。
newSingleThreadPool:是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建另一个线程来替代。newSingleTreadPool能确保依照任务在队列中的顺序来串行执行(例如FIFO、LIFO、优先级)
newScheduledThreadPool:创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务。
ThreadPoolExecutor
ThreadPoolExecutor为一些Executor提供了基本的实现,这些Executor是由Executors中newCachedThreadPool、newFixedThreadPool等方法返回的。ThreadPoolExecutor是一个灵活的、稳定的线程池,允许进行各种定制。
public ThreadPoolExecutor(int corePoolSize,//线程池的基本大小
int maximumPoolSize,//最大大小
long keepAliveTime,//存活时间
Timeout unit,
SlockingQueue<Runable> workQueue,
ThreadFactory threadFactory,
RejectExecutionHandler handler){...}
通过调节线程池的基本大小和存活时间,可以帮助线程池回收空闲线程占有的资源。
newFixedThreadPool工厂方法将线程池的基本大小和最大大小设置为参数中指定的值,而且创建的线程池不会超时。
newCachedThreadPool工厂方法将线程池的最大大小设置为Integer.MAX_VALUE,而将基本大小设置为零,并将超时设置为1分钟,这种方式创建出来的线程池可以无限扩展,并且当需求降低会自动收获。
//对通过标准工厂方法创建的Executor进行修改
ExecutorService exec = Execoutors.newCachedThreadPool();
if(exec instanceof ThreadPoolExecutor)
((ThreadPoolExecutor) exec).setCorePoolSize(10);
else
throw new AssertionError(*Oops, bad assumption);
java Executor相关推荐
- Java Executor源码解析(3)—ThreadPoolExecutor线程池execute核心方法源码【一万字】
基于JDK1.8详细介绍了ThreadPoolExecutor线程池的execute方法源码! 上一篇文章中,我们介绍了:Java Executor源码解析(2)-ThreadPoolExecutor ...
- Java Executor源码解析(7)—Executors线程池工厂以及四大内置线程池
详细介绍了Executors线程池工具类的使用,以及四大内置线程池. 系列文章: Java Executor源码解析(1)-Executor执行框架的概述 Java Executor源码解析(2)-T ...
- java Executor实例_Executor框架+实例
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- java executor spring_Spring+TaskExecutor实例
一 TaskExecutor接口 Spring的TaskExecutor接口等同于Java.util.concurrent.Executor接口. 实际上,它存在的主要原因是为了在使用线程池的时候,将 ...
- java executor解读_Java-多线程框架Executor解读
概述 在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程 ...
- java executor 异步_Java并发编程11-异步执行框架Executor
1 Executor框架的简介 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦.要执行任务的人只需把Task描述清楚,然后提交即可.这个Task是怎么被执行的,被谁执行的,什么时 ...
- java executor spring_java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)
一.java ExecutorService实现 创建ExecutorService变量 private ExecutorService executor = null 2.执行对应任务时,首先生成线 ...
- Java Executor接口
版本 JDK8(JDK1.8) Executor接口源码重点 1.Executor接口只定义了一个方法void execute(Runnable command),用于传递一个任务进去,该任务可以在新 ...
- java executor 源码_Java线程池ThreadPoolExecutor深度探索及源码解析
我们的程序里,时常要使用多线程.因此多线程的管理变的尤为重要.ThreadPoolExecutor很好的解决了这一点.本篇文章主要从源码入手,分析ThreadPoolExecutor的原理. 1.标记 ...
最新文章
- 51年被发现9次,陶哲轩证明的公式成了重复造轮子?事情并没有这么简单
- python读取html_从零开始的Python爬虫教程(一):获取HTML文档
- Codeforces Round #717 (Div. 2) D. Cut 倍增
- js正则 匹配 正则表达式
- 怎样配置键盘最方便,以及一些设计的思考
- [Classic] 日文版《出师表》
- win7安装硬盘后无法启动计算机,硬盘装Win7系统电脑后开机提示DISK BOOT FAILURE怎么办【图文】...
- 深入研究微服务架构——第二部分
- power bi 商业智能相关书籍介绍
- php设置 url长度,URL长度有限制吗?_PHP教程
- 1496.数括号法求广义表深度
- 程序员做外包有前途吗?
- Attention机制原理
- 十二黄金圣斗士阴险程度(爆笑)
- ORA-01000-超出打开游标的最大数(解决及原因)
- moses中的数据预处理预处理操作
- SkinSharp(Skin#)软件换肤库!
- keyshot渲染玻璃打光_keyshot8耳机渲染打光教程
- 年度规划复盘及一些收获
- ArcGIS二次开发入门 一