当前位置: 首页 > news >正文

Java ThreadPoolExecutor 线程池

import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.ArrayBlockingQueue;public class ThreadPoolExample {public static void main(String[] args) {// 创建线程池对象ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, // 核心线程数3, // 最大线程数1, // 线程空闲时间TimeUnit.MINUTES, // 空闲时间的单位new ArrayBlockingQueue<>(2) // 任务队列);// 提交任务给线程池执行threadPool.execute(new Runnable() {@Overridepublic void run() {// 任务的具体逻辑System.out.println("Task executed by thread: " + Thread.currentThread().getName());}});// 关闭线程池threadPool.shutdown();}
}

 

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

  new ThreadPoolExecutor的参数:

  1. corePoolSize(核心线程数):

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

  2. maximumPoolSize(最大线程数):

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

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

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

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

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

  5. workQueue(任务队列):

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

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

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

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

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

http://www.lryc.cn/news/206116.html

相关文章:

  • 网络协议--IP选路
  • 使用udevil自动挂载U盘或者USB移动硬盘
  • 学习笔记二十二:K8s控制器Replicaset
  • 2023-10-25 精神分析-领悟新技术的错误做法-持续数年的错误做法-记录与分析
  • Arrays 中的 asList()方法
  • 基于自动化工具autox.js的抢票(猫眼)
  • Java架构师内功计算机网络
  • vue 中 mixin 和 mixins 区别
  • reqable(小黄鸟)+雷电抓包安卓APP
  • 高等数学啃书汇总重难点(七)微分方程
  • 阿里云对象存储OSS文件无法预览,Bucket设置了Referer
  • 数字孪生技术:工业数字化转型的引擎
  • 算法刷题-哈希表
  • 2023NOIP A层联测17 黑暗料理
  • 关于nacos的配置获取失败及服务发现问题的排坑记录
  • 【QT】其他常用控件1
  • 交换机/防火墙-基础配置-23.10.11
  • alibaba.fastjson的使用(四)-- Json字符 与 JsonObject 的相互转化
  • linux 主机通信 ipv6 配置
  • 【JavaEE】初识计算机网络(TCP/IP五层模型及封装和分用)
  • 在nodejs中实现实时通信的几种方式
  • 【tg】 7 GroupInstanceCustomImpl
  • kubernates 集群实战-安装K3s集群
  • 通俗介绍:什么是 Redis ?
  • 蓝桥算法赛(摆玩具)
  • vueDay04——v-if else show
  • 大数据技术学习笔记(二)—— Hadoop 运行环境的搭建
  • leetcode系列(双语)002——GO两数相加
  • 废柴勇士(据说没有人能坚持37秒)
  • buuctf_练[羊城杯2020]easyphp