• Java ThreadPoolExecutor 线程池


    1. import java.util.concurrent.ThreadPoolExecutor;
    2. import java.util.concurrent.TimeUnit;
    3. import java.util.concurrent.ArrayBlockingQueue;
    4. public class ThreadPoolExample {
    5. public static void main(String[] args) {
    6. // 创建线程池对象
    7. ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
    8. 2, // 核心线程数
    9. 3, // 最大线程数
    10. 1, // 线程空闲时间
    11. TimeUnit.MINUTES, // 空闲时间的单位
    12. new ArrayBlockingQueue<>(2) // 任务队列
    13. );
    14. // 提交任务给线程池执行
    15. threadPool.execute(new Runnable() {
    16. @Override
    17. public void run() {
    18. // 任务的具体逻辑
    19. System.out.println("Task executed by thread: " + Thread.currentThread().getName());
    20. }
    21. });
    22. // 关闭线程池
    23. threadPool.shutdown();
    24. }
    25. }

     

      ThreadPoolExecutor是Java中用于管理和执行线程任务的一个实现类。

      new ThreadPoolExecutor的参数:

      1. corePoolSize(核心线程数):

        指定线程池中保持活动状态的线程数,即最小的线程数。即使线程处于空闲状态,核心线程也不会被回收。如果提交的任务数小于核心线程数,线程池会创建新的线程来处理任务。

      2. maximumPoolSize(最大线程数):

        指定线程池中允许存在的最大线程数。当提交的任务数超过核心线程数时,线程池会创建新的线程来处理任务,直到达到最大线程数。如果任务数继续增加,而线程池已经达到最大线程数,后续的任务将会被放入任务队列中等待执行。

      3. keepAliveTime(线程空闲时间):

        指定线程的空闲时间,即当线程池中的线程空闲时间超过该值时,多余的线程将被回收。只有当线程池中的线程数大于核心线程数时,才会应用空闲时间。

      4. unit(空闲时间的单位):

        指定线程空闲时间的单位,可以是TimeUnit.SECONDS、TimeUnit.MINUTES等。

      5. workQueue(任务队列):

        指定线程池的任务队列,用于存储等待执行的任务。可以使用不同的队列实现,如ArrayBlockingQueue、LinkedBlockingQueue等,这些队列都实现了BlockingQueue接口。   

        workQueue是一个容器,这个容器存储将要执行的任务 .    

        当线程池中的线程已经达到核心线程数,并且有新的任务提交时,这些任务会被放入任务队列中等待执行。

        任务队列的大小会影响线程池的行为。如果任务队列的大小有限,当任务数超过队列大小时,线程池会根据最大线程数来创建新的线程来处理任务。如果任务队列的大小为无界(例如LinkedBlockingQueue),则线程池会一直接受新的任务,直到达到最大线程数。    

        通过调整这些参数,可以根据实际需求来配置线程池的行为。例如,通过增加核心线程数和最大线程数,可以提高线程池的并发能力;通过调整线程空闲时间和任务队列的大小,可以控制线程池的资源消耗和任务处理能力。 需要根据具体的应用场景和需求来选择合适的参数值,以达到最佳的性能和资源利用率。

  • 相关阅读:
    云服务器CentOS8.2安装部署Docker一文详解
    百度echart的几种动画写法
    修改docker 版本的mysql 8.0 本机Navicat 连不上的问题
    信息中心网络提出的背景、研究现状及研究内容
    vue实现搜索文字高亮功能
    基于springboot+vue的员工绩效考核与激励系统
    Win10自带输入法怎么删除-Win10卸载微软输入法的方法
    什么是数学建模(mooc笔记)
    系统架构师--数据库系统
    Flink 侧输出流(SideOutput)
  • 原文地址:https://blog.csdn.net/weixin_41812346/article/details/134042276