面试:线程池的创建有哪几种方法?线程池的创建需要设置哪些参数?

6 阅读2分钟

线程池的创建有哪几种方法?线程池的创建需要设置哪些参数?

Executors工厂类提供了几种常见的线程池创建方法,使用简单,适用于大多数场景。同时ThreadPoolExecutor提供了更灵活的线程池创建方式,可以通过自定义参数来满足特殊需求。

Executors工厂类

  • Executors.newFixedThreadPool(int nThreads):创建一个固定大小的线程池,池中的线程数量始终保持不变。

  • Executors.newScheduledThreadPool(int corePoolSize):创建一个定长线程池,支持定时及周期性任务执行。

  • Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 

  • Executors.newCacheThreadPool():创建一个可缓存的线程池,如果线程池的当前线程数小于核心线程数,则创建新线程执行任务;否则,将任务放入缓存队列中。缓存型池子通常用于执行一些生存期很短的异步型任务。 

ThreadPoolExecutor自定义

  • corePoolSize:核心线程数。线程池中始终保持的线程数量,即使这些线程处于空闲状态。    

  • maximumPoolSize:最大线程数。线程池中允许的最大线程数量。如果队列已满且线程数达到最大值,新的任务会被拒绝。    

  • keepAliveTime:线程空闲时间。当线程数大于核心线程数时,多余的线程(非核心线程)在空闲时间后会被终止。   

  • unit:keepAliveTime 的时间单位。    

  • workQueue:任务队列。用于存储等待执行的任务。常见的阻塞队列有 LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue 等。   

  • threadFactory:线程工厂,用于创建新线程,可以自定义线程工厂来设置线程名称、优先级等。

  • handler:拒绝策略。当线程池已满且队列已满时,新的任务会被拒绝。常见的拒绝策略有:AbortPolicy:直接抛出异常。CallerRunsPolicy:由调用线程执行任务。DiscardPolicy:静默丢弃任务。DiscardOldestPolicy:丢弃队列中最旧的任务。

示例代码

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
    int corePoolSize,      // 核心线程数
    int maximumPoolSize,   // 最大线程数
    long keepAliveTime,    // 线程空闲时间
    TimeUnit unit,         // 时间单位
    BlockingQueue<Runnable> workQueue, // 任务队列
    ThreadFactory threadFactory,        // 线程工厂
    RejectedExecutionHandler handler    // 拒绝策略
);

//代码示例
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60L;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100);
ThreadFactory threadFactory= Executors.defaultThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler
);

关注公众号:咖啡Beans

在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。