Java 21 虚拟线程如何限流控制吞吐量
虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性。但是,随着这些变化而来的是如何最好地管理此吞吐量的问题。本文,就让我们看一下开发人员在使用虚拟线程时,应该如何管理吞吐量。
在大多数情况下,开发人员不需要自己创建虚拟线程。例如,对于 Web 应用程序,Tomcat 或 Jetty 等底层框架将为每个传入请求自动生成一个虚拟线程。
如果在应用程序内部需要自行调用来提供业务并发能力时,我们可以使用Java 21新特性:虚拟线程(Virtual Threads)中介绍的方法去创建和使用,比如较为常用的就是Executors.newVirtualThreadPerTaskExecutor()
。
Runnable runnable = () -> { System.out.println("Hello, www.didispace.com"); }; try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) { for (int i = 0; i < 100; i++) { executorService.submit(runnable); } }
我们可以像上面开启100个虚拟线程来执行任务。那么问题来了,我们要如何对虚拟线程限流控制吞吐量呢?
虚拟线程的限流
对于虚拟线程并发控制的答案是:信号量!**划重点:不要池化虚拟线程,因为它们不是稀缺资源。**所以,对于虚拟线程并发控制的最佳方案是使用java.util.concurrent.Semaphore
。
下面的代码示例演示了如何实现java.util.concurrent.Semaphore
来控制虚拟线程的并发数量:
public class SemaphoreExample { // 定义限流并发的信号量,这里设置为:10 private static final Semaphore POOL = new Semaphore(10); public void callOldService(...) { try{ POOL.acquire(); // 尝试通过信号量获取执行许可 } catch(InterruptedException e){ // 执行许可获取失败的异常处理 } try { // 获取到执行许可,这里是使用虚拟线程执行任务的逻辑 } finally { // 释放信号量 POOL.release(); } } }
是不是很简单呢?今天的分享就到这里,希望对你有所帮助,更多关于Java新特性的学习可以关注我的免费专栏Java新特性。
扩展阅读
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
秒级弹性!探索弹性调度与虚拟节点如何迅速响应瞬时算力需求?
前言 在前面的文章《弹性调度助力企业灵活应对业务变化,高效管理云上资源》中,我们介绍了阿里云容器服务 ACK 弹性调度为了帮助客户解决在使用云上弹性资源时,面对的“难以差异化控制业务资源使用量,缩容时部分业务 Pod 未释放”等挑战,提供了按照多级资源的优先顺序进行调度,以及按照定义的优先顺序进行缩容的能力。 本文将介绍弹性调度如何使用虚拟节点来满足您的业务弹性需求。 企业在实施应用弹性过程中,弹性速度和弹性位置是重点关注的两个核心指标。 对于追求高可用以及稳定性的企业来说,敏捷的弹性能够在业务流量突增时,保证系统的连续性与稳定性。同时,通过跨多地域部署应用,可以在地域性故障发生时,有效地维持服务的持续可用性。 对于大数据处理任务的企业来说,快速的弹性能够缩短任务执行时间,加快应用的迭代速度。同时,集中部署在单个地域,则可以减少应用之间的网络通信时延,从而进一步提升数据处理效率。 显然,这两个指标对于确保企业业务的稳定高效运行至关重要。 然而,许多企业在面对快速到来的业务流量高峰和日益增长的大数据算力需求时,现行的分钟级自动伸缩节点池的弹性响应已经无法满足需求。并且,通过合理的部署策略...
- 下一篇
ModStartBlog v9.0.0 二级分类支持,博客前台发布,富文本升级
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 会员模块通用且完整,支持完整的API调用 大文件分片上传,进度条显示,已上传文件管理 强大的模块扩展功能,所有模块可以无缝集成,支持在线安装、卸载模块 完善的开发助手,实现模块、主题的的一键创建 完善的后台权限管理,支持基于RBAC的权限管理系统 后台管理支持使用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方支付支持(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储支持,支持云储存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信支持(阿里云、腾讯云、华为云、百度云、253云通讯、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V9.0.0版本更新 2024年02月24日ModStartBlog发布v9.0.0版本,增加了...
相关文章
文章评论
共有0条评论来说两句吧...