ExecutorService 详解 -- 执行器服务(线程池)

前言

ExecutorService是Java提供的线程池,也就是说,每次我们需要使用线程的时候,可以通过ExecutorService获得线程。它可以有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞,同时提供定时执行、定期执行、单线程、并发数控制等功能,也不用使用TimerTask了。

1、线程池是为了避免服务端大量线程的创建和销毁而造成资源的浪费
2、线程池创建好之后,开始的时候里面不包含任何线程
3、在线程池创建的时候,要指定它包含的线程数量
4、当线程池中的线程没有达到指定数量的时候,那么每一个请求都会创建一个新的线程来处理
5、核心线程用完之后,不会被销毁,而是会还回线程池等待下一个请求
6、当核心线程全部被占用,那么后来的请求会被放入工作队列中
7、工作队列本质上是一个阻塞式队列
8、当工作队列也被用满,那么后来的更多请求会被线程池中创建出来的临时线程处理
9、临时线程用完之后,不会立即销毁,而是会存活指定的一段时间后才会被销毁
10、如果临时线程全部被占用,后来的线程要么被阻塞,要么交给拒绝处理器来进行拒绝

ExecutorService 的创建方法(自定义)
在这里插入图片描述核心参数
在这里插入图片描述工作流程
在这里插入图片描述
常用线程池
在这里插入图片描述

缓存线程池 – newCachedThreadPool(Java定义好的线程池)

ExecutorService es = Executors.newCachedThreadPool();

使用场景:适用于大量的短任务场景,或者大量高并发,一定不适合用于长任务场景,导致服务器承载大量的线程甚至于导致服务器的崩溃。

特点:
1、没有核心线程
2、全部都是临时线程
3、临时线程数量为Integer.MAX_VALUE
4、临时线程存活时间较短,为1分钟
5、工作队列是一个同步队列

固定线程数的线程池-- newFixedThreadPool(int threadsNum) (Java定义好的线程池)

ExecutorService es = Executors.newFixedThreadPool(20);

使用场景:大量的长任务场景,不适合短任务场景,会导致短任务的耗费时间偏长

特点:
1、需要指定核心线程数量
2、全部都是核心线程,没有临时线程
3、工作队列为阻塞式链式队列,存储无限多个任务

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值