ThreadPoolExecutor参数与拒绝策略

 

ThreadPoolExecutor参数的含义  https://www.jianshu.com/p/0e228dc30793 

资料

  1. **** 线程池之ThreadPoolExecutor使用 https://www.jianshu.com/p/f030aa5d7a28

  2.**** 线程池拒绝策略及有界无界队列 https://www.jianshu.com/p/80b14c4c1ff4
线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:
  ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)

  • corePoolSize: 核心线程池大小
  • maximumPoolSize: 最大线程池大小
  • keepAliveTime: 线程最大空闲时间

    //当线程池中的线程数量大于 corePoolSize 时,如果某线程空闲时间超过 keepAliveTime ,线程将被终止。
    这样,线程池可以动态的调整池中的线程数。

  • unit: 线程池维护线程所允许的空闲时间的单位

    unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
    NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。纳秒、微秒、毫秒、秒

  • workQueue: 线程池使用的缓冲队列

    ThreadPoolExecutor线程池的API文档中,一共推荐了三种等待队列,
    它们是:SynchronousQueue、LinkedBlockingQueue和ArrayBlockingQueue;
        同步队列 链接阻塞队列 数组阻塞队列

  • threadFactory: ThreadFactory 线程工厂,用于创建线程
  • handler: 线程池的拒绝策略

问题
1.拒绝策略什么时候使用
  核心线程 corePoolSize 、任务队列 workQueue 、最大线程 maximumPoolSize ,如果三者都满了,使用
  handler处理被拒绝的任务。
    handler有四个选择:
      ThreadPoolExecutor.AbortPolicy()
        抛出java.util.concurrent.RejectedExecutionException异常
      ThreadPoolExecutor.CallerRunsPolicy()
        重试添加当前的任务,他会自动重复调用execute()方法
      ThreadPoolExecutor.DiscardOldestPolicy()
        抛弃旧的任务
      ThreadPoolExecutor.DiscardPolicy()
        抛弃当前的任务

posted @ 2020-10-18 00:26  九涯  阅读(576)  评论(0编辑  收藏  举报