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

Spring Boot项目使用虚拟线程

Spring Boot项目启用虚拟线程

  • 开始
    • 基本使用
      • 先写一个测试方法
      • 通过springboot配置项开启虚拟线程
    • 目前存在的问题

开始

虚拟线程正式发布是在JDK21,对于Spring Boot版本选择3以上。

基本使用

关于虚拟线程本身的使用,之前已经介绍过。这里要说的是直接将Spring Boot项目的http请求处理的线程换成虚拟线程。

先写一个测试方法

写一个简单的方法查看当前线程信息

@RestController
@Slf4j
public class DemoController {@GetMapping("demo")public void demo() {Thread thread = Thread.currentThread();log.info("当前线程, id = {}, name = {}, isVirtual = {}", thread.threadId(), thread.getName(), thread.isVirtual());}
}

通过springboot配置项开启虚拟线程

官方文档

spring:main:# 由于虚拟线程是守护线程,如果JVM所有线程都是虚拟线程,JVM会直接退出。因此官方建议开启以下属性避免主线程退出JVMkeep-alive: truethreads:virtual:enabled: true

目前存在的问题

实际测试下来,这种配置方式在使用undertow作为web容器时没有生效。官方文档中暂时没看到相关说明,暂时只有通过自定义 UndertowServletWebServerFactory来实现

@Configuration
public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {@Overridepublic void customize(UndertowServletWebServerFactory factory) {// 创建虚拟线程执行器
//        ExecutorService virtualThreadExecutor = Executors.newVirtualThreadPerTaskExecutor();factory.addDeploymentInfoCustomizers(deploymentInfo -> {deploymentInfo.setExecutor(Executors.newVirtualThreadPerTaskExecutor());deploymentInfo.setAsyncExecutor(Executors.newVirtualThreadPerTaskExecutor());});}
}
  • 以上方式使用jdk内置的方法创建Executor,如果要自定义一些属性可以自定义方法
    public static ExecutorService newVirtualThreadPerTaskExecutor() {Thread.Builder.OfVirtual builder = Thread.ofVirtual();builder.name("under-vir-", 0);ThreadFactory factory = builder.factory();return newThreadPerTaskExecutor(factory);}
http://www.lryc.cn/news/504373.html

相关文章:

  • 实现SpringBoot项目嵌入其他项目
  • 朗致面试---IOS/安卓/Java/架构师
  • 数字信号处理:FIR滤波器
  • 鲲鹏麒麟安装Kafka-v1.1.1
  • 群控系统服务端开发模式-应用开发-操作记录功能开发
  • 昇思25天学习打卡营第33天|共赴算力时代
  • Vue 让视图区域滑到指定位置、回到顶部
  • EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用
  • Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)
  • WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现
  • opencv——图片矫正
  • 前端核心知识总结
  • 【C语言】五子棋(c语言实现)
  • 【数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】
  • Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用
  • 6.1 初探MapReduce
  • 【数模学习笔记】模糊综合评价
  • 【C语言】库函数常见的陷阱与缺陷(四):内存内容操作函数[1]--memcmp
  • jmeter CLI Mode 传参实现动态设置用户数
  • 数据库和SQL的基本概念
  • CSS系列(9)-- Transform 变换详解
  • 一些浅显易懂的IP小定义
  • C 语言动态爱心代码
  • 【Figma_01】Figma软件初始与使用
  • 【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
  • day2 数据结构 结构体的应用
  • CSS 进阶教程:从定位到动画与布局
  • Nginx性能优化全方案:打造一个高效服务器
  • 详解Maven的setting配置文件中mirror和repository的区别
  • 框架模块说明 #07 API加密