首页 > 其他分享 >SpringBoot中启用虚拟线程

SpringBoot中启用虚拟线程

时间:2023-10-21 10:45:12浏览次数:30  
标签:SpringBoot 启用 Executors Bean 虚拟 线程 public

1. 什么是虚拟线程

虚拟线程是JDK21版本正式发布的一个新特性。虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为“虚拟”。这种解耦是由JVM提供的抽象层赋予的。

虚拟线程的运行成本远低于平台线程。它们消耗的内存要少得多。这就是为什么我们可以创建数百万个虚拟线程而不会出现内存不足的问题,而标准平台(或内核)线程只能创建数百个。

因此,我们可以无需依赖异步代码即可管理高度可扩展的应用程序。

2. 代码实战

在SpringBoot项目中创建MyThreadConfig

@EnableAsync
@Configuration
public class MyThreadConfig {
    @Bean
    public AsyncTaskExecutor applicationTaskExecutor() {
        return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
    }

    @Bean
    public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
        return protocolHandler -> {
            protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
        };
    }
}

上述代码主要是将SpringBoot内置的线程池修改为虚拟线程。第一个Spring Bean(ApplicationTaskExecutor)将取代标准的ApplicationTaskExecutor,提供一个 Executor,为每个任务启动一个新的虚拟线程。第二个 Bean 命名为 ProtocolHandlerVirtualThreadExecutorCustomizer,它将以同样的方式定制标准的 TomcatProtocolHandler

3. 总结

项目改用虚拟线程后,HTTP请求降低30%的耗时,用户体验更佳。

标签:SpringBoot,启用,Executors,Bean,虚拟,线程,public
From: https://www.cnblogs.com/jonil/p/17778587.html

相关文章

  • 第4节、进程、线程、程序关系简介
    进程、线程、程序关系简介1、进程2、线程3、进程和线程的关系4、程序和进程、线程5、类比说明1、进程进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程......
  • 创建线程的三种方式:继承Thread、Runnable 接口、Callable 接口
    当在Java中创建线程时,有以下3种方法:1.通过实现Runnable接口:这是Java中创建线程的推荐方式,因为它允许你分离线程的任务(run方法)与线程的执行。以下是创建线程的步骤:创建一个实现Runnable接口的类,该接口包含一个run方法,这个方法将定义线程要执行的任务。classMyRunnableimpl......
  • 线程的状态
    在Java中,线程可以处于不同的状态,这些状态反映了线程的当前状态和活动。线程的状态通常由Java虚拟机(JVM)来管理,而开发人员可以使用多线程编程工具来控制线程的状态转换。Java中的线程状态包括以下几种主要状态:NEW(新建):当创建了一个线程对象,但还没有调用其start()方法时,线程处于新......
  • SpringBoot Vue3打造企业级一体化SaaS系统[最新版完结]
    点击下载:SpringBoot+Vue3打造企业级一体化SaaS系统     提取码:3ixbSpringBoot和Vue3是目前十分盛行的JavaWeb开发技术栈。SpringBoot能够快速构建Web应用程序,并提供许多有用的功用,如自动配置、快速开发、高效性能、易于部署等。Vue3是一种盛行的前端框架,它能够协助开发......
  • 6基于SpringBoot + Vue 的超市进销存系统-计算机毕业设计源码+LW文档
    摘 要 超市管理系统是指一种针对超市的信息化管理系统,它通过计算机技术和网络技术,对超市的采购、销售、库存等业务进行管理和控制。随着社会经济的发展和人们生活水平的提高,超市已经成为人们日常生活中必不可少的消费场所,而超市管理系统的出现则极大地提高了超市的经营效率和......
  • 4、多线程
    多线程一、线程的创建1.1线程的创建方式一:继承Thread类Java为开发者提供了一种类叫做Thread,该类的对象用来表示线程。用此方法创建线程并执行的步骤如下:定义一个子类继承Thread类,并重写run方法创建该子类的实例对象调用start方法启动线程(启动线程后,会自动执行run方法中的......
  • 第二章 第三四节 线程池技术以及使用 上
    线程池技术介绍1.线程池的作用​ 避免重复不断地创建、销毁线程,浪费系统资源​ PS:线程池可以成一个容器​ 多线程业务:发短信或者发送邮件(异步任务);请求第三方接口(异步任务);2.线程池原理​3.线城池的销毁​ shutDown等待正在执行任务执行完毕,才会销毁​ shutDownNow......
  • 深入理解 Python 虚拟机:进程、线程和协程
    深入理解Python虚拟机:进程、线程和协程在本篇文章当中深入分析在Python当中进程、线程和协程的区别,这三个概念会让人非常迷惑。如果没有深入了解这三者的实现原理,只是看一些文字说明,也很难理解。在本篇文章当中我们将通过分析部分源代码来详细分析一下这三者根本的区别是什......
  • 多线程编程同步:Posix信号量
    信号量的定义IPC是进程间通信(interprocesscommunication)的简称。狭义上,IPC主要用于进程间;广义上,IPC可用于进程间或线程间。Posix消息队列、Posix信号量和Posix共享内存区合称为“PosixIPC”.信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段。......
  • SpringBoot3-监听器
    SpringApplicationRunListener该监听器,监听SpringBoot应用的生命周期1.自定义SpringApplicationRunListener实现类在META-INF/spring.factories中配置org.springframework.boot.SpringApplicationRunListener=自己的Listener,还可以指定一个有参数构造器,接受两个参数(SpringA......