当前位置:网站首页>使用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
边栏推荐
- 基于CM管理的CDH集群集成Phoenix
- Logging module
- leetcode--357. Count the number of different figures
- JDBC详解
- Some experience of using dialogfragment and anti stepping pit experience (getactivity and getdialog are empty, cancelable is invalid, etc.)
- win10自带Groove音乐不能播放CUE和APE文件的一种曲线救国办法,自己创建aimppack插件包,AIMP安装DSP插件
- Mock测试
- Homebrew是什么?以及使用
- Research on recyclerview details - Discussion and repair of recyclerview click dislocation
- MYSQL 主从同步避坑版教程
猜你喜欢
在MAC上安装mysql
Prediction of tomorrow's trading limit of Low Frequency Quantization
微信小程序调用客服接口
帆软实现一个单选按钮,可以统一设置其他单选按钮的选择状态
帆软中单元格中隔行变色以及数量大于100字体变大变红设置
基於CM管理的CDH集群集成Phoenix
How QT designer adds resource files
倒计时1天~2022云容灾产品线上发布会即将开始
使用DialogFragment的一些感受及防踩坑经验(getActivity、getDialog为空,cancelable无效等)
关于密匙传递的安全性和数字签名
随机推荐
Wechat applet communicates with low-power Bluetooth - sending data to hardware (III)
Recyclerview advanced use (I) - simple implementation of sideslip deletion
百度图片识别自定义实现(替代AipOcr)
教育行业云迁移最佳实践:海云捷迅使用HyperMotion云迁移产品为北京某大学实施渐进式迁移,成功率100%
Some good articles on pthread multithreading
Switch usage (wechat applet)
星界边境Starbound创意工坊订阅的mod的存放路径
Wechat applet obtains login user information, openid and access_ token
星界边境文本自动翻译机使用说明
Easyexcel读取excel表地理位置数据,按中文拼音排序
更改plsql工具栏的图标大小
JSP学习2
MySQL数据库讲解(十)
leetcode--357. Count the number of different figures
RecyclerView高级使用(一)-侧滑删除的简单实现
Pycharm连接远程服务器并实现远程调试
云容灾是什么意思?云容灾和传统容灾的区别?
封装logging模块
VMware 15pro mounts the hard disk of the real computer in the deepin system
Wechat applet initializes Bluetooth, searches nearby Bluetooth devices and connects designated Bluetooth (I)