• ThreadPoolExecutor构造参数分析


    ThreadPoolExecutor 7个参数:

    1. corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
    2. maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
    3. workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
    4. keepAliveTime:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被销毁。
    5. unit : keepAliveTime 参数的时间单位。
    6. threadFactory :executor 创建新线程的时候会用到的线程工厂。
    7. handler :饱和策略。

    阻塞队列:

    1. ArrayBlockingQueue :由数组结构组成的有界阻塞队列。
    2. LinkedBlockingQueue :由链表结构组成的有界阻塞队列。
    3. PriorityBlockingQueue :支持优先级排序的无界阻塞队列。
    4. DelayQueue: 使用优先级队列实现的无界阻塞队列。
    5. SynchronousQueue: 不存储元素的阻塞队列。
    6. LinkedTransferQueue: 由链表结构组成的无界阻塞队列。
    7. LinkedBlockingDeque: 由链表结构组成的双向阻塞队列。

    ThreadPoolExecutor 饱和策略

            如果当前同时运行的线程数量达到最大线程数量并且队列也已经被放满了时,ThreadPoolExecutor 执行定义的策略:

    1. ThreadPoolExecutor.AbortPolicy:抛出 RejectedExecutionException来拒绝新任务的处理,默认策略。
    2. ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务,也就是直接在调用execute方法的线程中运行被拒绝的任务,如果执行程序已关闭,则会丢弃该任务。当业务要求任何一个任务都要被执行的话,可以选择这个策略。
    3. ThreadPoolExecutor.DiscardPolicy: 不处理新任务,直接丢弃掉。
    4. ThreadPoolExecutor.DiscardOldestPolicy: 丢弃队列最前面的任务,也就是最早进入线程池的未处理的任务。
        private static final int CORE_POOL_SIZE = 5;
        private static final int MAX_POOL_SIZE = 10;
        private static final int QUEUE_CAPACITY = 100;
        private static final Long KEEP_ALIVE_TIME = 0L;
    private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("test-pool-%d").build();

      public static void main(String[] args) {
        //阿里巴巴推荐的创建线程池的方式 
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
        CORE_POOL_SIZE,
        MAX_POOL_SIZE,
        KEEP_ALIVE_TIME,
        TimeUnit.SECONDS,
        new ArrayBlockingQueue<>(QUEUE_CAPACITY),
        namedThreadFactory,
        new ThreadPoolExecutor.CallerRunsPolicy());

      }

  • 相关阅读:
    Adobe Flex初记
    将获得datebox值的文本形式转为日期格式
    Java代码中获取Json的key值
    SortedMap与TreeMap的一个典型应用
    上传本地代码到github&&从github下载源码
    springMVC第一课--配置文件
    MySQL视图的优缺点以及如何创建视图
    一张图看懂IaaS, PaaS和SaaS的区别
    二十三种设计模式-六大原则
    数据库设计三大范式
  • 原文地址:https://www.cnblogs.com/uip001/p/14780507.html
Copyright © 2020-2023  润新知