【并发编程篇23】线程池的种类

40 阅读1分钟

JUC包下Executor类提供了大量创建连接池的静态方法,常见就有4种:

  • 创建使用固定线程数的线程池—newFixedThreadPool(int threadNum)

    • 核心线程数和最大线程数是一样的,没有救急线程
    • 阻塞队列是LinkedBlockingQueue,最大容量是Integer.MAX_VALUE
  • 单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO)执行 newSingleThreadPool()

    • 核心线程数和最大线程数都是1
    • 阻塞队列是LinkedBlockingQueue,最大容量是Integer.MAX_VALUE
    • 适合执行顺序型的任务
  • 可缓存线程池 newCacheThreadPool()

    • 核心线程数为0
    • 最大线程数是Integer.MAX_VALUE
    • 阻塞队列为SynchronousQueue:不存储元素的阻塞队列,每个插入操作都必须等待一个移除操作
    • 适合任务数比较密集,但每个任务执行时间比较短的情况
  • 提供了延迟和周期执行功能的线程池 newScheduledThreadPool