博客
关于我
Java自定义线程池来模拟银行办理业务场景来解析ThreadPoolExecutor的七大参数和四大拒绝策略
阅读量:370 次
发布时间:2019-03-05

本文共 1815 字,大约阅读时间需要 6 分钟。

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()//银行的拒绝策略  );

转载地址:http://myhg.baihongyu.com/

你可能感兴趣的文章
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>