美文网首页
ThreadPoolExecutor

ThreadPoolExecutor

作者: 有腹肌的豌豆Z | 来源:发表于2020-09-11 16:15 被阅读0次
  • 继承与抽象方法AbstractExecutorService,也就间接实现了ExecutorService、Executor等接口。

构造函数

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.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

  • corePoolSize:
    核心线程数量,所谓核心线程就是一直保留在线程池中,即使处于空闲状态也不会销毁线程,除非手动调用allowCoreThreadTimeOut才可以在超时销毁。
  • maximumPoolSize:
    线程池允许创建的最大线程数量。
  • keepAliveTime:
    线程池中除了有核心线程之外,还有非核心线程,非核心线程处于空闲的时候会在一定时间范围内被关闭,而这个空闲的时间就是keepAliveTime。
  • unit:
    keepAliveTime的时间单位,比如秒、分、时等
  • workQueue:
    保存待执行任务的阻塞队列。如果一个任务进入线程池之后,如果核心线程满了的话,就会先尝试添加到队列中,当然未必添加成功,而且队列也有多种实现,具体的后面再说,先简单理解为排队即可。
  • threadFactory:
    如果没有设置的话,使用默认的ThreadFactory来创建线程;当然你也可以通过ThreadFactory自己创建线程,比如设置线程名称,优先级等。
  • handler:
    当达到线程池的最大容量时的拒绝策略。当线程池饱和,继续提交任务,需要一种策略来处理该任务。线程池提供了4种策略:
    AbortPolicy:直接抛出异常,这是默认策略;
    CallerRunsPolicy:用调用者所在的线程来执行任务;
    DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
    DiscardPolicy:直接丢弃任务;

相关文章

网友评论

      本文标题:ThreadPoolExecutor

      本文链接:https://www.haomeiwen.com/subject/flhpsktx.html