zoukankan      html  css  js  c++  java
  • 线程池的工作原理与源码解读

    1.线程池的创建:

    ThreadPoolExecutor参数最全的构造方法:

    public ThreadPoolExecutor(int corePoolSize,
                                  int maximumPoolSize,
                                  long keepAliveTime,
                                  TimeUnit unit,
                                  BlockingQueue<Runnable> workQueue,
                                  ThreadFactory threadFactory,
                                  RejectedExecutionHandler handler) {
            if (corePoolSize < 0 ||
                maximumPoolSize <= 0 ||
                maximumPoolSize < corePoolSize ||
                keepAliveTime < 0)
                throw new IllegalArgumentException();
            if (workQueue == null || threadFactory == null || handler == null)
                throw new NullPointerException();
            this.acc = System.getSecurityManager() == null ?
                    null :
                    AccessController.getContext();
            this.corePoolSize = corePoolSize;
            this.maximumPoolSize = maximumPoolSize;
            this.workQueue = workQueue;
            this.keepAliveTime = unit.toNanos(keepAliveTime);
            this.threadFactory = threadFactory;
            this.handler = handler;
        }

    ①corePoolSize:线程池的核心线程数,说白了就是,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。

    ②maximumPoolSize:最大线程数,不管你提交多少任务,线程池里最多工作线程数就是maximumPoolSize。

    ③keepAliveTime:线程的存活时间。当线程池里的线程数大于corePoolSize时,如果等了keepAliveTime时长还没有任务可执行,则线程退出。

    ⑤unit:这个用来指定keepAliveTime的单位,比如秒:TimeUnit.SECONDS。

    ⑥workQueue:一个阻塞队列,提交的任务将会被放到这个队列里。

    ⑦threadFactory:线程工厂,用来创建线程,主要是为了给线程起名字,默认工厂的线程名字:pool-1-thread-3。

    ⑧handler:拒绝策略,当线程池里线程被耗尽,且队列也满了的时候会调用。

    2.线程池执行流程:

    任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQueue满了,则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就会调用handler,以表示线程池拒绝接收任务。

    未完待续...

  • 相关阅读:
    Windows平台下MySQL常用操作与命令
    button和sumbit提交表单的区别
    AjaxPro.Net的使用
    小写金额转换成大写
    sqlserver自动定时备份数据库并按日期命名
    dw文档的当前编码不能正确保存文档所有字符.....
    windows 2003 ii6 上运行asp出现http500错误
    图片提示预览效果
    一个网站优化seo的年终工作总结
    很COOL的相册
  • 原文地址:https://www.cnblogs.com/kobe-lin/p/12028050.html
Copyright © 2011-2022 走看看