本文主要是介绍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 ScheduledThreadPoolExecutorextends ThreadPoolExecutorimplements ScheduledExecutorService {
Executors: 加了s ,相当于Arrays,Collections 等,
ThreadPoolExecutor : 一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。
ScheduledExecutorService: 接口,一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
ScheduledThreadPoolExecutor : 实现了 ScheduledExecutorService: , 因为它作为一个使用 corePoolSize 线程和一个无界队列的固定大小的池,所以调整 maximumPoolSize 没有什么效果。
– 阿里:
线程池不允许 Executors 这个去创建,通过这个 ThreadPoolExecutor 去创建,这样的处理方式让使用的同学明确线程池的运行规则,避免资源耗尽!
说明:
Executors中各个方法的弊端:
1)
- newFixedThreadPool 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
- newSingleThreadExecutor 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
问题:主要是堆积的请求处理队列可能会耗费非常大的内存,导致OOM!
2)
- newCachedThreadPool 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
- newSingleThreadScheduledExecutor 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
问题:主要问题是线程数的最大值是 Integer.MAX_VALUE(2^31 - 1) ,可能会创建非常多的线程导致OOM!
这篇关于Executors和ThreadPoolExecutor学习整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!