首页 > 其他分享 >为什么要使用线程池?创建线程池的参数有哪些?线程池的原理是什么?

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

时间:2023-03-14 12:55:45浏览次数:34  
标签:线程 哪些 corePoolSize 创建 maximumPoolSize 参数 workQueue CPU

为什么要使用线程池?

线程池有一下优点:

  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

标签:线程,哪些,corePoolSize,创建,maximumPoolSize,参数,workQueue,CPU
From: https://www.cnblogs.com/ekko-w/p/17191710.html

相关文章

  • rails header 传参数开发环境正式环境区别
    rails开发环境api传递access_token参数  在controller用 request.headers["HTTP_ACCESS_TOKEN"]可获取到值。但是在生产环境却获取不到值了。原因是生产环境head......
  • springboot 中使用@Value 获取配置文件中参数问题
    springboot中使用@Value("${spring.redis.password}")获取配置文件中参数时,如果配置文件中没有相关参数,项目启动时会报错Causedby:java.lang.IllegalArgumentExcep......
  • MFC-多线程
             ......
  • C++_一些重要的编译参数
    1.-g编译带调试信息的可执行文件#-g告诉g++产生可供GDB使用的调试信息。g++-gtest.cpp-otest2.-O[n]优化源代码-O:同时减小代码的长度和执行时间,其效果等价于......
  • 多线程编程(二)(李慧芹)
    (37条消息)互斥锁(mutex)_清风徐来Groot的博客-CSDN博客Linux中提供一把互斥锁mutex(也称之为互斥量)。每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁......
  • 【多线程】C++11多线程(简约但不简单) 原创
    【多线程】C++11多线程(简约但不简单) 目录​ ​一、简单使用​​​ ​1、线程参数​​​ ​2.类成员函数做为线程入口​​​ ​3.join:等待线程执......
  • Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
    Hello、Hello大家好,我是ST,今天我们继续来聊一聊Linux中多线程编程中的重要知识点,详细谈谈多线程中同步和互斥机制。1、同步和互斥互斥:多线程中互斥是指多个线程访问同一资源......
  • 【线程同步工具】CyclicBarrier源码分析
    在指定状态点同步任务Java并发API提供了可以使多个线程在一个指定点同步的工具类CyclicBarrier,该类前文介绍的CountDownLatch有些类似,但是它的一些特殊性使得其更为......
  • Java线程池
    线程池的目的是通过对线程的管理,让多线程程序中的多线程便捷开发、高效运行。线程池的存在的意义让线程变得可重用,减小线程创建和销毁带来的消耗。线程池中保留的可用......
  • 线程池
    基本原理:    importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassExecutorsDemo{//创建线程池的两......