Executor框架的详解(转载)
- Executor是一个接口,他是Executor框架的基础,它将任务的提交与任务的执行分离。
- ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任务。
- ScheduledThreadPoolExecutor是一个实现类,可以在给定的延迟后运行命令,或者定期执行命令。ScheduledThreadPoolExecutor 比 Timer 更灵活,功能更强大。
- Future接口和它的实现FutureTask类,代表异步计算的结果。
- Runnable和Callable接口的实现类,都可以被ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 执行。
- 主线程首先要创建实现 Runnable接口或者Callable接口的任务对象。工具类Executors可以把一个Runnable对象封装为一个Callable对象
1
2
3
|
Executors.callable(Runnale task);
或
Executors.callable(Runnable task, Object resule);
|
- 然后可以把Runnable对象直接交给ExecutorService执行
1
2
3
|
ExecutorServicel.execute(Runnable command);
或者也可以把Runnable对象或Callable对象提交给ExecutorService执行
ExecutorService.submit(Runnable task);
|
- 最后,主线程可以执行FutureTask.get()方法来等待任务执行完成。主线程也可以执行FutureTask.cancel(boolean mayInterruptIfRunning)来取消此任务的执行。
- corePool:核心线程池的大小
- maximumPool:最大线程池的大小
- BlockingQueue:用来暂时保存任务的工作队列
- RejectedExecutionHandler:当ThreadPoolExecutor已经关闭或ThreadPoolExecutor已经饱和时(达到了最大线程池的大小且工作队列已满),execute()方法将要调用的Handler。
1
2
3
4
5
|
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads, 0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
|
- FixedThreadPool的corePoolSize和maxiumPoolSize都被设置为创建FixedThreadPool时指定的参数nThreads。
- 0L则表示当线程池中的线程数量操作核心线程的数量时,多余的线程将被立即停止
- 最后一个参数表示FixedThreadPool使用了无界队列LinkedBlockingQueue作为线程池的做工队列,由于是无界的,当线程池的线程数达到corePoolSize后,新任务将在无界队列中等待,因此线程池的线程数量不会超过corePoolSize,同时maxiumPoolSize也就变成了一个无效的参数,并且运行中的线程池并不会拒绝任务。
1
2
3
4
5
6
|
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
|
1
2
3
4
5
|
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
|
转载于:https://juejin.im/post/5add7c366fb9a07ab9791658
Executor框架的详解(转载)相关推荐
- 集合框架 Queue---BlockingQueue详解
转载自 集合框架 Queue---BlockingQueue详解 摘要:本例介绍一个特殊的队列:BlockingQueue,如果BlockingQueue是空的,从BlockingQueue取东西的 ...
- Spring基于注解TestContext 测试框架使用详解
原创整理不易,转载请注明出处:Spring基于注解TestContext 测试框架使用详解 代码下载地址:http://www.zuidaima.com/share/1775574182939648. ...
- java定时任务框架elasticjob详解
这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...
- 关于Spring 任务调度之task:scheduler与task:executor配置的详解
关于Spring 任务调度之task:scheduler与task:executor配置的详解 其实就是Spring定时器中配置文件中一些配置信息,由于笔者自己是头一次使用,有些配置详细不太明白,随即 ...
- 试设计递归算法dfs traverse_BFS 算法框架套路详解
作者:labuladong 公众号:labuladong 后台有很多人问起 BFS 和 DFS 的框架,今天就来说说吧. 首先,你要说 labuladong 没写过 BFS 框架,这话没错,今天写个框 ...
- Android UI 测试框架Espresso详解
Android UI 测试框架Espresso详解 1. Espresso测试框架 2.提供Intents Espresso 2.1.安装 2.2.为Espresso配置Gradle构建文件 2.3. ...
- 网易考拉海购Dubbok框架优化详解
网易考拉海购Dubbok框架优化详解 摘要:微服务化是当前电商产品演化的必然趋势,网易考拉海购通过微服务化打破了业务爆发增长的架构瓶颈.本文结合网易考拉海购引用的开源Dubbo框架,分享支持考拉微服务 ...
- layUI前端框架使用详解_layUI前端框架视频教程
百度云网盘下载 ayUI前端框架使用详解_layUI前端框架视频教程 课程目录: 1前言 2为什么要用layUI框架 3layer组件的引用方法 4layer组件的使用方法详解 5用layer组件快速 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...
最新文章
- 2022-2028年中国电熔镁行业市场研究及发展趋势分析报告
- 取代百度!美团成中国第三大互联网公司
- 《AngularJS实战》——3.1 模板中的过滤器
- kafka传递文件_从面试角度一文学完 Kafka
- PMP之项目沟通管理
- uboot移植(七)——移植三星官方uboot(一)
- 如何使用Docker安装Redis\Zookeeper\Mysql
- Java数组扩容算法及Java对它的应用
- Linux IO复用:select、poll、epoll的理解与对比
- C# 参考之方法参数关键字:params、ref及out (收集)
- Linux 10分钟掌握Linux常用开发工具及编译的四个过程
- web开发 java如何连接数据库并取得数据,实现 增,删,改,查
- 微软Office Online服务安装部署(二)
- ActiveMQ(19):高级特性之独有消费者(Exclusive Consumer)
- 批量标注数量大的地图注记
- Hexo 的next主题下添加网易云音乐作BGM
- 教你九招防电脑辐射的方法!
- 阿里云网盘,图什么?
- Will , will be 的差別以及用法
- python excelwriter保存路径_从Excel中解救你!如何用Python实现报表自动化
热门文章
- delphi 调用php接口_贝壳找房小程序从PHP到Golang的跃迁之路
- 中国队刷新知识图谱“世界杯”,但点开冠军团队一看,我愣住了
- 用树莓派的方式打开小米手机:摇晃手机控制小车,前进后退加转弯,成本不到350元 | 开源...
- 马斯克说要开放自动驾驶和电池技术,上周被特斯拉起诉的公司已哭晕
- 这个小学生毕业典礼被全世界围观:疫情之下开脑洞,《我的世界》还能这样玩!中国网友:作业写不完的我感到嫉妒...
- 碎片化时间里的高质量阅读,这几个公众号请收好~
- 有赞MySQL自动化运维之路—ZanDB
- ServiceLoader的使用
- 从git中永久物理删除私密文件(改写git历史)
- 使用LVS+TUN搭建集群实现负载均衡