当前位置:网站首页>使用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
边栏推荐
猜你喜欢
随机推荐
Intégration de Clusters CDH Phoenix basée sur la gestion cm
关于云容灾,你需要知道这些
CDH cluster integration Phoenix based on CM management
mysql 5.1升级到5.68
Logging module
JDBC details
jsp学习3
Gartner预测云迁移规模大幅增长;云迁移的优势是什么?
RecyclerView进阶使用-实现仿支付宝菜单编辑页面拖拽功能
Jmeter安装教程以及我遇到的问题的解决办法
postman批量生产body信息(实现批量修改数据)
Chapter I review of e-commerce spike products
Research on recyclerview details - Discussion and repair of recyclerview click dislocation
金融行业云迁移实践 平安金融云整合HyperMotion云迁移解决方案,为金融行业客户提供迁移服务
HyperBDR云容灾V3.2.1版本发布|支持更多云平台,新增监控告警功能
关于NodeJS中JSON5的相关配置和使用
什么是云迁移?云迁移的四种模式分别是?
VMware 15pro mounts the hard disk of the real computer in the deepin system
Wechat applet positioning and ranging through low-power Bluetooth device (2)
政务云迁移实践 北明数科使用HyperMotion云迁移产品为某政府单位实施上云迁移项目,15天内完成近百套主机迁移









