当前位置:网站首页>使用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
边栏推荐
猜你喜欢
随机推荐
Detailed tutorial on the use of setinterval timing function of wechat applet
JDBC和servlet写CRUD的接口总结
leetcode--357. Count the number of different figures
Redis数据库讲解(一)
基于ibeacons签到系统
数据库DbVisualizer Pro报文件错误,导致数据连接失败
帆软调用动态传参的方法,在标题中设置参数
帆软报表设置单元格填报以及根据值的大小进行排名方法
帆软实现分页时第一行和最后两行冻结方式
Jmeter安装教程以及我遇到的问题的解决办法
Jmeter设置环境变量支持在任意终端目录输入jmeter直接启动
基于CM管理的CDH6.3.2集群集成Atlas2.1.0
openstack理论知识
使用DialogFragment的一些感受及防踩坑经验(getActivity、getDialog为空,cancelable无效等)
回顾2021:如何帮助客户扫清上云最后一公里的障碍?
帆软实现一个单选按钮,可以统一设置其他单选按钮的选择状态
mysql 5.1升级到5.610
Gartner预测云迁移规模大幅增长;云迁移的优势是什么?
FBS (fman build system) packaging
jsp学习3