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

线程池常规使用 以及 基本的信息

第一种 (详细代码可见检修计划断面文件多天生成方法) 步骤一: 在Application启动类 配置线程池的Bean 在启动类上添加 启用异步注解 @EnableAsync @Bean(name = "sectionalFileServiceExecutors") public Executor sectionalFileServiceExecutors() { int corePoolSize = 32; int maximumPoolSize = 64; long keepAliveTime = 30; TimeUnit unit = TimeUnit.SECONDS; BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(200); // 自定义线程 名称 便于查看调试 ThreadFactory threadFactory = new ThreadFactory() { private final AtomicInteger threadNumber = new AtomicInteger(1); @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, "sectional-file-pool-" + threadNumber.getAndIncrement()); thread.setDaemon(false); return thread; } }; RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy(); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler ); return threadPoolExecutor; } /** * 泛型实体类深拷贝 工具方法 * * @param object * @return: T * @Author: zhangKangLe * @Date: 2024/10/21 14:13 */ public static <T> T deepCopy(T object) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(object); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (T) ois.readObject(); } catch (IOException | ClassNotFoundException e) { throw new RuntimeException("Deep copy failed", e); } } 步骤二: 控制层 ( execute 方法启动是没有返回值的) // 依赖注入 @Autowired Executor asyncServiceExecutor; @PostMapping("/***********************") public Result generateTypicalSection_Executor(@RequestBody SectionalFileBO sectionalFileBO) { String startTime = sectionalFileBO.getStartTime(); String endTime = sectionalFileBO.getEndTime(); List<String> dateList = generateDateRange(startTime, endTime, "yyyy-MM-dd"); for (String dataDate : dateList) { asyncServiceExecutor.execute(() -> { SectionalFileBO itemEntity = deepCopy(sectionalFileBO); itemEntity.setDataDate(dataDate); sectionFileGenerationService.generateTypicalSection_Executor(itemEntity); }); } return Result.success("典型断面生成 成功"); } 步骤三:配置 ThreadPoolExecutorConfig 类 @Configuration @EnableAsync @Slf4j public class ThreadPoolExecutorConfig { /** * 核心线程数(默认线程数) */ private int corePoolSize = 32; /** * 最大线程数 */ private int maxPoolSize = 64; /** * 允许线程空闲时间(单位:默认为秒) */ private static final int keepAliveTime = 60; /** * 缓冲队列大小 */ private int queueCapacity = 200; @Bean("asyncServiceTaskExecutor") public Executor asyncServiceTaskExecutor() { log.info("start asyncServiceExecutor"); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //配置核心线程数 executor.setCorePoolSize(corePoolSize); //配置最大线程数 executor.setMaxPoolSize(maxPoolSize); //配置空闲时间 executor.setKeepAliveSeconds(keepAliveTime); //配置队列大小 executor.setQueueCapacity(queueCapacity); //配置线程前缀名 executor.setThreadNamePrefix("async-service-"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调
http://www.jsqmd.com/news/1130567/

相关文章:

  • Self-Parking Car Evolution:如何使用遗传算法让汽车学会自动泊车
  • CANN Ascend C矩阵乘Tiling baseM值获取
  • 理解原子变量之三:原子性与memory_order_relaxed
  • 传统工具 vs Slidev 对比
  • YOLOv5 火焰识别实战:1421张数据集训练,mAP@0.5 达 0.89(附完整代码)
  • SmartTube完整教程:3步在Android TV上安装无广告YouTube客户端
  • 无需Root!三步法让安卓手机告别臃肿,快速提升隐私与续航的终极方案
  • CCHMapClusterController高级技巧:动态聚类控制与多组聚类管理
  • 【 LM358AD方波】2024-12-31
  • Buildout PYTHONPATH接管机制导致子进程模块导入失败
  • Word2Bits预训练模型下载与应用:800维1位量化向量高效部署指南
  • Sync源码解析:深入理解Erlang自动重载工具的架构设计
  • 从零实现Google OAuth 2.0登录:Node.js后端集成与安全实践
  • Git删除文件安全指南:从暂存区清理到历史重写
  • Twitter API Client测试策略:单元测试与集成测试完整指南
  • twitter-api-php测试策略:使用PHPUnit进行API集成测试
  • 解决CSM联机延迟:提升《城市:天际线》多人游戏体验的10个实用技巧
  • SageMaker Studio Lab部署指南:将训练好的模型无缝集成到AWS服务
  • icanhazproxy.com使用指南:如何快速检测与分析HTTP代理头信息
  • 如何快速上手intellij-erlang?5分钟完成Erlang IDE搭建指南
  • Wexflow安全部署指南:保护你的自动化流程免受攻击
  • 3分钟掌握Android投屏神器:scrcpy让手机屏幕完美显示在电脑上
  • AcDisplay Xposed模块开发:如何扩展Android系统级通知功能
  • 5步掌握GTA5最强修改器:YimMenu终极使用指南
  • CANN/asc-devkit多核矩阵乘法临时缓冲区大小获取
  • 革命性开源天气API:Open-Meteo如何重塑全球气象数据访问
  • 零代码革命:如何用MIT App Inventor在3天内开发出你的第一个移动应用?
  • 如何利用MONAI解决医疗影像AI开发中的核心挑战:模块化设计与实战应用
  • 3步解锁PPT科研演示效率:SlideSCI插件终极解决方案
  • AssetRipper终极指南:如何快速提取Unity游戏资源并转换为可编辑格式