Executors和ThreadPoolExecutor学习整理

任务的执行与线程池(上)
https://mp.weixin.qq.com/s/p3JZERyZXnF8jR_3KKIGJA
任务的执行与线程池(下)
https://mp.weixin.qq.com/s/iUAaVXIB8rCzP_GeDhIlqA

java并发编程–Executor 框架
https://www.cnblogs.com/MOBIN/p/5436482.html

线程池 ThreadPoolExecutor 、 Executors 参数详解与源代码分析
https://www.cnblogs.com/nullzx/p/5184164.html

线程池实例:使用Executors和ThreadPoolExecutor
http://www.importnew.com/8542.html

线程池的工作原理及使用示例
https://www.cnblogs.com/nullzx/p/5175574.html

public class ScheduledThreadPoolExecutor
        extends ThreadPoolExecutor
        implements ScheduledExecutorService {

Executors: 加了s ,相当于Arrays,Collections 等,

ThreadPoolExecutor : 一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。

ScheduledExecutorService: 接口,一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。

ScheduledThreadPoolExecutor : 实现了 ScheduledExecutorService: , 因为它作为一个使用 corePoolSize 线程和一个无界队列的固定大小的池,所以调整 maximumPoolSize 没有什么效果。

– 阿里:
线程池不允许 Executors 这个去创建,通过这个 ThreadPoolExecutor 去创建,这样的处理方式让使用的同学明确线程池的运行规则,避免资源耗尽!

说明:
Executors中各个方法的弊端:
1)
- newFixedThreadPool 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
- newSingleThreadExecutor 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
问题:主要是堆积的请求处理队列可能会耗费非常大的内存,导致OOM!

扫描二维码关注公众号,回复: 2453327 查看本文章

2)
- newCachedThreadPool 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
- newSingleThreadScheduledExecutor 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
问题:主要问题是线程数的最大值是 Integer.MAX_VALUE(2^31 - 1) ,可能会创建非常多的线程导致OOM!

猜你喜欢

转载自blog.csdn.net/u010648555/article/details/81233292
今日推荐