Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(三)

③. 你在工作中是如何创建线程池的,是否自定义过线程池使用


①. AbortPolicy: 最大不会抛出异常的值= maximumPoolSize + new LinkedBlockin gDeque<Runnable>(3) =8个。如果超过8个,默认的拒绝策略会抛出异常


②. CallerRunPolicy: 如果超过8个,不会抛出异常,会返回给调用者去


③. DiscardOldestPolicy:如果超过8个,将最早进入队列的任务删除,之后再尝试加入队列


④. DiscardPolicy:直接丢弃任务,不予任何处理也不抛出异常.如果允许任务丢失,这是最好的拒绝策略


public class MyThreadPoolDemo {
    public static void main(String[] args) {
        ExecutorService threadPool = new ThreadPoolExecutor(
                2,
                5,
                1L,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<Runnable>(3),
                Executors.defaultThreadFactory(),
                //默认抛出异常
                //new ThreadPoolExecutor.AbortPolicy()
                //回退调用者
                //new ThreadPoolExecutor.CallerRunsPolicy()
                //处理不来的不处理,丢弃时间最长的
                //new ThreadPoolExecutor.DiscardOldestPolicy()
                //直接丢弃任务,不予任何处理也不抛出异常
                new ThreadPoolExecutor.DiscardPolicy()
        );
        //模拟10个用户来办理业务 没有用户就是来自外部的请求线程.
        try {
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
        //threadPoolInit();
    }
}


④. 合理配置线程池你是如何考虑的?


  • ①. CPU密集型


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(三)


②. IO密集型


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(三)


上一篇:【今日推荐】10大流行的 Metro UI 风格的 Bootstrap 主题和模板


下一篇:log4net 自定义Layout日志字段