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

jdk21虚拟线程

1、简述

        在 JDK 21 中,虚拟线程(Virtual Threads)已经成为正式特性,通过 java.lang.ThreadofVirtual() 方法可以创建虚拟线程。以下是使用虚拟线程的简单示例代码,展示如何在 JDK 21 中使用虚拟线程来执行并发任务。

2、代码demo

package com.ybw.thread.virtual;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 虚拟线程示例
 *
 * @author ybw
 * @version V1.0
 * @className VirtualThreadDemo
 * @date 2025/2/21
 **/
@Slf4j
public class VirtualThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        // 创建一个虚拟线程池(使用 Executors.newVirtualThreadPerTaskExecutor())
        try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
            // 提交多个任务到虚拟线程池
            for (int i = 0; i < 10; i++) {
                int taskNumber = i;
                executorService.submit(() -> {
                    // 模拟耗时任务
                    log.info("Task {} is running on thread: {}", taskNumber, Thread.currentThread());
                    try {
                        // 模拟耗时操作
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                        log.info("Task {} was interrupted.", taskNumber);
                    }
                    log.info("Task {} completed.", taskNumber);
                });
            }
            //等待线程执行结束
            TimeUnit.DAYS.sleep(1);
            // 关闭线程池
            executorService.shutdown();
        }
    }
}

代码说明:

  1. 虚拟线程池

    • 使用 Executors.newVirtualThreadPerTaskExecutor() 创建一个虚拟线程池。每次提交任务时,线程池会自动创建一个新的虚拟线程来执行任务。

    • 虚拟线程的创建和销毁开销极低,因此可以轻松处理大量并发任务。

  2. 任务执行

    • 每个任务通过 executorService.submit() 提交到线程池中。

    • 在任务中,通过 Thread.currentThread() 可以获取当前执行任务的线程,它将是一个虚拟线程。

  3. 线程池关闭

    • 在所有任务完成后,调用 executorService.shutdown() 关闭线程池。

虚拟线程的优势

  • 轻量级:虚拟线程的创建和销毁成本极低,适合处理高并发场景。

  • 与现有代码兼容:虚拟线程完全兼容 java.lang.Thread API,无需修改现有代码即可使用。

  • 简化线程管理:通过虚拟线程池,可以轻松管理大量并发任务,而不会导致系统资源耗尽。

相关文章:

  • 每天五分钟深度学习pytorch:使用Inception模块搭建GoogLeNet模型
  • 【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元
  • 第47天:Web开发-JavaEE应用JNDI注入RMI服务LDAP服务DNS服务高版本限制绕过
  • Content-Type类型总结(安全)
  • Python的算数运算、逻辑运算和分支语句
  • 实时性保障方案
  • 基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • C语言多人聊天室 ---chat(客户端聊天)
  • 蓝桥杯学习笔记03-滑动窗口不定长(最长/最大)
  • Python代码片段-断点任务
  • Linux常见问题
  • 算法日记27:完全背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
  • Unity Android SDK 升级、安装 build-tools、platform-tools
  • 【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制
  • 【C语言】指针(6)
  • 通俗理解什么是云原生?
  • Spring Boot 3 集成 RabbitMQ 实践指南
  • 《操作系统 - 清华大学》 8 -6:进程管理:进程状态变化模型
  • 3、优先级翻转问题
  • Ubuntu中部署deepseek
  • 船只深夜撞上海上风机后沉没1死1失踪,调查报告公布
  • 四川邻水县县长石国平拟任县(市、区)党委书记
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 持续更新丨伊朗港口爆炸事件已致561人受伤
  • 白酒瓶“神似”北京第一高楼被判侵权,法院一审判赔45万并停售
  • 帕力旦·吐尔逊已任喀什大学党委副书记、校长