记CompletableFuture在项目中的实际用法

2024-05-30 03:28

本文主要是介绍记CompletableFuture在项目中的实际用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.在application.yaml中记录线程池配置信息

thread:coreSize: 20maxSize: 200keepAliveTime: 20

2.在MyThreadConfig配置类中映射线程池配置信息

@Configuration
public class MyThreadConfig {@Value("thread.coreSize")private Integer coreSize;@Value("thread.maxSize")private Integer maxSize;@Value("thread.keepAliveTime")private Integer keepAliveTime;@Beanpublic ThreadPoolExecutor threadPoolExecutor() {return new ThreadPoolExecutor(coreSize,maxSize,keepAliveTime,TimeUnit.SECONDS,new LinkedBlockingDeque<>(2000),new CustomizableThreadFactory("CPool"),// setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务// CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行new ThreadPoolExecutor.CallerRunsPolicy());}}

3.实际代码中使用CompletableFuture

@Resourceprivate ThreadPoolExecutor executor;RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();CompletableFuture<Long> pickupTask = CompletableFuture.supplyAsync(() -> {RequestContextHolder.setRequestAttributes(requestAttributes);// 处理业务逻辑return 0L;}, executor).whenComplete((res, error) -> {if (error != null) {log.error(error.getMessage());}});CompletableFuture<Long> deliverTask = CompletableFuture.supplyAsync(() -> {RequestContextHolder.setRequestAttributes(requestAttributes);// 处理业务逻辑return 0L;}, executor).whenComplete((res, error) -> {if (error != null) {log.error(error.getMessage());}});CompletableFuture<Long> waitTask = CompletableFuture.supplyAsync(() -> {RequestContextHolder.setRequestAttributes(requestAttributes);// 处理业务逻辑return 0L;}, executor).whenComplete((res, error) -> {if (error != null) {log.error(error.getMessage());}});CompletableFuture.allOf(pickupTask, deliverTask, waitTask).join();

CustomizableThreadFactory.java

public class CustomizableThreadFactory implements ThreadFactory {private final ThreadGroup group;private final AtomicInteger threadNumber = new AtomicInteger(1);private final String namePrefix;public CustomizableThreadFactory(String prefix) {this.namePrefix = "ThreadPool-" + prefix + "-thread-";SecurityManager s = System.getSecurityManager();group = (s != null) ? s.getThreadGroup() :Thread.currentThread().getThreadGroup();}@Overridepublic Thread newThread(Runnable r) {Thread t = new Thread(group, r,namePrefix + threadNumber.getAndIncrement(),0);if (t.isDaemon()) {t.setDaemon(false);}if (t.getPriority() != Thread.NORM_PRIORITY) {t.setPriority(Thread.NORM_PRIORITY);}return t;}
}

这篇关于记CompletableFuture在项目中的实际用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015446

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步