【Java并发】Java中的线程池

版权声明:转载请注明出处: https://blog.csdn.net/qq_21687635/article/details/84673240

执行流程

处理流程如下:
处理流程

execute()方法执行示意图如下:
execute()方法执行示意图

线程池的创建

  1. corePoolSize:线程池的基本大小

  2. workQueue:用于保存等待执行的任务的阻塞队列

  • ArrayBlockingQueue:基于数组结构的有界阻塞队列
  • LinkedBlockingQueue:基于链表结构的无界阻塞队列
  • SynchronousQueue:无容量的阻塞队列
  • PriorityBlockingQueue:具有优先级的无界阻塞队
  1. maximumPoolSize:线程池允许创建的最大线程数。

  2. ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。

  3. RejectedExecutionHandler:当队列和线程池都满了,会采取某种策略去执行新的任务。

  • AbortPolicy:直接抛出异常
  • CallerRunsPolicy:调用者所在的线程运行任务
  • DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务
  • DiscardPolicy:不处理,丢弃掉。
  1. keepAliveTime:当线程的数量大于corePoolSize时,线程池的工作线程空闲后,保持存活的时间

  2. TimeUnit:keepAliveTime的时间单位

提交任务

  1. execute()方法用于提交不需要返回值的任务

  2. submit()方法用于提交需要返回值的任务

关闭线程池

  1. shutdown():停止所有没有正在执行任务的线程

  2. shutdownNow():尝试停止所有的正在执行或暂停任务的线程

参考

  1. Java并发编程的艺术[书籍]

猜你喜欢

转载自blog.csdn.net/qq_21687635/article/details/84673240