当前位置:网站首页>使用Executors类快速创建线程池
使用Executors类快速创建线程池
2022-04-23 14:07:00 【pureluckyfish】
Executors 类中定义了Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable类的工厂方法和实用方法。这个类支持以下几种方法:
一、此类中方法简介
1.创建各种线程池的静态方法,返回值为ExecutorService
| 方法 | 描述 |
| newCachedThreadPool() | 创建一个缓存线程池,线程池内的线程会存活60s |
| newCachedThreadPool(ThreadFactory threadFactory) | 使用指定的工厂类,创建一个缓存线程池,线程池内的线程会存活60s |
| newFixedThreadPool(int nThreads) | 创建一个固定数量线程的线程池 |
| newFixedThreadPool(int nThreads, ThreadFactory threadFactory) | 使用指定的工厂类,创建一个固定数量线程的线程池 |
| newSingleThreadExecutor() | 创建一个线程的线程池 |
| newSingleThreadExecutor(ThreadFactory threadFactory) | 使用指定的工厂类,创建一个线程的线程池 |
2.创建各种线程池的静态方法,返回值为ScheduledExecutorService
| 方法 | 描述 |
| newScheduledThreadPool(int corePoolSize) | 创建一个线程池,该线程池可以调度命令在给定延迟后运行或定期执行 |
| newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) | 使用指定的工厂类,创建一个线程池,该线程池可以调度命令在给定延迟后运行或定期执行 |
| newSingleThreadScheduledExecutor() | 创建一个单线程执行器,该执行器可以安排命令在给定延迟后运行或定期执行 |
| newSingleThreadScheduledExecutor(ThreadFactory threadFactory) | 使用指定的工厂类,创建一个单线程执行器,该执行器可以安排命令在给定延迟后运行或定期执行 |
3.创建并返回一个ThreadFactory,该ThreadFactory将新创建的线程设置为已知状态
| 返回值 | 方法 | 描述 |
| static ThreadFactory | defaultThreadFactory() | 返回一个默认的线程工厂类用来创建新线程 |
| static ThreadFactory | privilegedThreadFactory() | 返回一个线程工厂,该线程工厂用于创建具有与当前线程相同权限的新线程,privilegedThreadFactory类继承了defaultThreadFactory类 |
4.从其他类似闭包的表单中创建并返回一个Callable的方法,因此它们可以用于需要Callable的执行方法
| 返回值 | 方法 | 描述 |
| static Callable<Object> | callable(PrivilegedAction<?> action) | 返回一个Callable对象,该对象在被调用时运行给定的特权操作并返回其结果 |
| static Callable<Object> | callable(PrivilegedExceptionAction<?> action) | 返回一个Callable对象,该对象在被调用时运行给定的特权异常操作并返回其结果 |
| static Callable<Object> | 返回一个Callable对象,该对象在被调用时运行给定的任务并返回null | |
| static <T> Callable<T> | callable(Runnable task, T result) | 返回一个Callable对象,该对象在被调用时运行给定的任务并返回给定的结果 |
二、不建议使用Executors的原因
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,避免资源耗尽的风险。Executors各个方法的弊端:
1. newSingleThreadExecutor和newFixedThreadPool:主要问题是对接的请求处理队列可能会耗费非常大的内存,甚至OOM
2.newCachedThreadPool和newScheduledThreadPool:主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,设置OOM
三、Executor接口
接口中只有一个execute方法,此接口是所有线程池的鼻祖
版权声明
本文为[pureluckyfish]所创,转载请带上原文链接,感谢
https://blog.csdn.net/sinat_33918956/article/details/118568910
边栏推荐
- Logging module
- leetcode--380. O (1) time insertion, deletion and acquisition of random elements
- 云迁移的六大场景
- OpenStack如何跨版本升级
- MySQL数据库讲解(八)
- On the multi-level certificate based on OpenSSL, the issuance and management of multi-level Ca, and two-way authentication
- 金融行业云迁移实践 平安金融云整合HyperMotion云迁移解决方案,为金融行业客户提供迁移服务
- 利用json-server在本地创建服务器请求
- Research on recyclerview details - Discussion and repair of recyclerview click dislocation
- 微信小程序调用客服接口
猜你喜欢

Cdh6 based on CM management 3.2 cluster integration atlas 2 one
Jira截取全图

VMware Workstation 无法连接到虚拟机。系统找不到指定的文件

教育行业云迁移最佳实践:海云捷迅使用HyperMotion云迁移产品为北京某大学实施渐进式迁移,成功率100%

MYSQL 主从同步避坑版教程

帆软调用动态传参的方法,在标题中设置参数

Win10 comes with groove music, which can't play cue and ape files. It's a curvilinear way to save the country. It creates its own aimpack plug-in package, and aimp installs DSP plug-in

某政务云项目业务系统迁移调研实践

Some good articles on pthread multithreading

帆软报表设置单元格填报以及根据值的大小进行排名方法
随机推荐
There is a mining virus in the server
云容灾是什么意思?云容灾和传统容灾的区别?
回顾2021:如何帮助客户扫清上云最后一公里的障碍?
星界边境文本自动翻译机使用说明
Logging module
Use of WiFi module based on wechat applet
log4j 输出日志信息到文件中
Research on recyclerview details - Discussion and repair of recyclerview click dislocation
Chrome插件 之 Selenium IDE、XPath 安装
mysql 5.1升级到5.68
Essential difference between restful WebService and gSOAP webservice
HyperBDR云容灾V3.3.0版本发布|容灾功能升级,资源组管理功能优化
VMware installation 64 bit XP Chinese tutorial
Multiple inheritance virtual base exercises
使用Postman进行Mock测试
leetcode--380. O (1) time insertion, deletion and acquisition of random elements
JDBC和servlet写CRUD的接口总结
多云数据流转?云上容灾?年前最后的价值内容分享
mysql 5.1升级到5.610
Mysql个人学习总结
