为什么要使用线程池?创建线程池的参数有哪些?线程池的原理是什么?

为什么要使用线程池?

线程池有一下优点:

  1. 线程在是非常宝贵的资源,使用线程池可以重复使用线程,避免频繁的创建和销毁线程所带来的系统损耗。
  2. 可以根据系统的具体情况调整线程池中的数量,避免创建太多线程将服务器资源耗尽。

创建线程池的参数有哪些?

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler);
  1. corePoolSize: 核心线程数
  2. maximumPoolSize: 最大线程数
  3. keepAliveTime:当总的线程数大于核心线程数时,空闲线程的最大存活时间
  4. unit:存活时间单位
  5. workQueue:存放任务的队列
  6. threadFactory:创建线程时指定的工厂
  7. handler:超出最大线程数和队列容量的处理策略

线程池的原理是什么?

提交一个任务到线程池中,线程池的处理流程为:

  1. 如果当前线程数量少于 corePoolSize,则创建线程来执行任务。
  2. 如果大于 corePoolSize,将任务存放到 workQueue 中。如果 workQueue 已经满了,则进入下个流程。
  3. 判断当前线程数量是否少于 maximumPoolSize, 如果少于则创建线程来执行任务。如果创建的线程数量已经达到了 maximumPoolSize,则使用用户配置的 RejectedExecutionHandler拒绝策略处理。
    image

那线程池中线程的数量应该如何设置?

设置线程池中线程数量,要根据不同的业务场景来设置。
常见的场景有两种:

  1. CPU密集型:CPU+1
  2. IO密集型:CPU核数*2
posted @ 2023-03-14 12:44  maoxianww  阅读(54)  评论(0编辑  收藏  举报