package com.company.线程池; import java.util.concurrent.*; /** * @Author * @Description TODO * @Date 14:50$ 2019/8/5 **/ /** * 4种拒绝策略: * 1)ThreadPoolExecutor.AbortPolicy(),如果请求超过maximumpoolsize和capacity之和, * 则抛出异常java.util.concurrent.RejectedExecutionException * 2)ThreadPoolExecutor.CallerRunsPolicy(),如果请求超过maximumpoolsize和capacity之和, * 使用此策略,如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行 * 3)ThreadPoolExecutor.DiscardOldestPolicy(),如果队列满了,会将最早进入队列的任务删掉腾出空间 * 4)ThreadPoolExecutor.DiscardPolicy(),如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常 */ public class 手写版ThreadPool { public static void main(String[] args) { ExecutorService threadPool=new ThreadPoolExecutor( 2, 5, 1L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardPolicy()); try { for (int i=0;i<9;i++){ threadPool.execute(new Thread(()->{ System.out.println(Thread.currentThread().getName()+": 处理业务"); })); } }catch ( Exception e){ e.printStackTrace(); }finally { threadPool.shutdown(); } } }
线程池的4种拒绝策略 ThreadPoolExecutor
最新推荐文章于 2024-07-18 22:02:31 发布