线程池七大参数

在 Java 中,线程池的创建通常通过 ThreadPoolExecutor 类来实现,它提供了一些参数用于配置线程池的行为。七大参数是:

  1. corePoolSize(核心线程数):

    • 线程池的基本大小,即在没有任务需要执行的时候,线程池的大小。当有任务需要执行时,线程池会创建新的线程,直到达到核心线程数。
  2. maximumPoolSize(最大线程数):

    • 线程池允许创建的最大线程数。如果队列已满,并且当前线程数小于最大线程数,线程池会创建新的线程执行任务。
  3. keepAliveTime(线程空闲时间):

    • 当线程池中的线程数量大于核心线程数时,多余的空闲线程在维持给定的时间后会被终止,直到线程池的大小等于核心线程数。
  4. unit(线程空闲时间的单位):

    • 用于指定 keepAliveTime 参数的时间单位,可以是秒、毫秒、微秒等。
  5. workQueue(阻塞队列):

    • 用于保存等待执行的任务的阻塞队列。可以选择不同的队列实现,如 LinkedBlockingQueueArrayBlockingQueueSynchronousQueue 等。
  6. threadFactory(线程工厂):

    • 用于创建新线程的工厂。可以通过自定义线程工厂来设置线程的命名、优先级、是否为守护线程等。
  7. handler(拒绝策略):

    • 当任务添加到线程池被拒绝时的处理策略。常见的策略有:
      • ThreadPoolExecutor.AbortPolicy:直接抛出 RejectedExecutionException 异常(默认)。
      • ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务。
      • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列中最老的任务。
      • ThreadPoolExecutor.DiscardPolicy:直接丢弃被拒绝的任务。

例如,通过以下方式创建一个线程池:

ThreadPoolExecutor executor = new ThreadPoolExecutor(
        5, // corePoolSize
        10, // maximumPoolSize
        60, // keepAliveTime
        TimeUnit.SECONDS, // unit
        new LinkedBlockingQueue<>(), // workQueue
        Executors.defaultThreadFactory(), // threadFactory
        new ThreadPoolExecutor.AbortPolicy() // handler
);

这里是一个简单的例子,实际使用时需要根据应用的具体需求进行参数配置。

你可能感兴趣的:(多线程,java,开发语言)