本文共 1815 字,大约阅读时间需要 6 分钟。
1.在阿里巴巴开发手册中指出不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,所以大部分我们都是使用ThreadPoolExecutor
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人办理业务时只会在第一和第二个窗口进行办理
ThreadPoolExecutor threadPool = new ThreadPoolExecutor( 2,//开启的2个窗口 5,//最多的窗口 2,//超时的时间,就是超过一定时间,其他3个窗口就会关闭 TimeUnit.SECONDS,//超时的单位 new LinkedBlockingQueue<>(3),//候客区 Executors.defaultThreadFactory(),//创建线程的工厂 new ThreadPoolExecutor.DiscardOldestPolicy()//银行的拒绝策略 );
转载地址:http://myhg.baihongyu.com/