创建线程池

通过Executors创建线程池:

  • newCachedThreadPool:可缓存线程池
    • 当线程池长度超过处理需要时,可以灵活的回收空闲线程,当需要增加时,可以灵活的添加新线程
    • 线程数量最大值是Integer.MAX_VALUE,因此可以无限新建线程,容易造成内存溢出
  • newFixedThreadPool:定长线程池
    • 可以自己设置线程最大并发数
    • 线程数量是固定的,但阻塞队列是无界队列,如果请求积压,阻塞队列越来越长,容易导致OOM
  • newScheduledThreadPool:固定长度的可以定时或周期执行的线程池
    • 所有任务由一个独立线程来调度
    • 同一时间只能执行一个任务,任何延迟或异常都会影响后面任务的执行
  • newSingleThreadPool:单线程的线程池
    • 能够保证所有任务按指定顺序执行
    • 单线程,高并发下无力
  • new ThreadPoolExecutor():自定义线程池

    自定义线程池

    new ThreadPoolExecutor(...)
    构造参数如下:
    1. corePoolSize 核心线程数量
    2. maximumPoolSize 最大线程数量
    3. keepAliveTime 线程保持时间,N个时间单位
    4. unit 时间单位(比如秒,分)
    5. workQueue 阻塞队列
    6. threadFactory 线程工厂
    7. handler 线程池拒绝策略