1.在阿里巴巴开发手册中指出不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,所以大部分我们都是使用ThreadPoolExecutor
2.使用ThreadPoolExecutor 那么就得知道七大参数
3.四种拒绝策略
4.正常银行办理业务场景
解析:这里只开了两个窗口办理业务,当客户来办理时只能在这两个窗口办理业务,人越来越多,就会在候客区等待,依次办理业务
5.假设有一天要办理的客户超级多
解析:当客户很多是,那么银行就会开启其他几个窗口,当窗口人数已满,候客区也满了,这时候还有客户来办理业务,那么银行就会采取拒绝措施(这里只是虚拟,正常银行不会这么干,只是客户自己会选择离开)
6.Java自定义线程池来模拟银行办理业务场景
package com.kuang.threadpool;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorDemo {
public static void main(String[] args) {
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
2,//开启的窗口
5,//最多的窗口
2,//超时的时间
TimeUnit.SECONDS,//超时的单位
new LinkedBlockingQueue(3),//候客区
Executors.defaultThreadFactory(),//创建线程的工厂
new ThreadPoolExecutor.DiscardOldestPolicy()//银行的拒绝策略
);
try {
//最大承载:Deque + max
//超过 RejectedExecutionException
for (int i = 1; i <= 9; i++) {
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+" ok");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
测试结果:当1~5人办理业务时只会在第一和第二个窗口进行办理
测试结果:当6~8人办理业务是,就会开启5个窗口办理业务
测试结果:当超过8人时,银行就会采取拒绝策略(这里采用抛出异常)
7.七大参数提取
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
2,//开启的2个窗口
5,//最多的窗口
2,//超时的时间,就是超过一定时间,其他3个窗口就会关闭
TimeUnit.SECONDS,//超时的单位
new LinkedBlockingQueue(3),//候客区
Executors.defaultThreadFactory(),//创建线程的工厂
new ThreadPoolExecutor.DiscardOldestPolicy()//银行的拒绝策略
);
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。