关于java:Java-21-新特性虚拟线程Virtual-Threads

3次阅读

共计 1809 个字符,预计需要花费 5 分钟才能阅读完成。

在 Java 21 中,引入了虚构线程(Virtual Threads)来简化和加强并发性,这使得在 Java 中编程并发程序更容易、更高效。

虚构线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该性能旨在简化并发编程并提供更好的可扩展性。虚构线程是轻量级的,这意味着它们能够比传统线程创立更多数量,并且开销要少得多。这使得在本人的线程中运行独自工作或申请变得更加实用,即便在高吞吐量的程序中也是如此。

创立和应用虚构线程

在 Java 21 中创立和应用虚构线程有多种办法:

1. 应用动态构建器办法

Thread.startVirtualThread办法将可运行对象作为参数来创立,并立刻启动虚构线程,具体如下代码:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};

// 应用动态构建器办法
Thread virtualThread = Thread.startVirtualThread(runnable);

也能够应用 Thread.ofVirtual() 来创立,这里还能够设置一些属性,比方:线程名称。具体如下代码:

Thread.ofVirtual()
        .name("didispace-virtual-thread")
        .start(runnable);

2. 与 ExecutorService 联合应用

从 Java 5 开始,就举荐开发人员应用 ExecutorServices 而不是间接应用 Thread 类了。当初,Java 21 中引入了应用虚构线程,所以也有了新的 ExecutorService 来适配,看看上面的例子:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};

try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {for (int i = 0; i < 100; i++) {executorService.submit(runnable);
    }
}

上述代码在 try 代码块中创立了一个ExecutorServices,用来为每个提交的工作创立虚构线程。

3. 应用虚构线程工厂

开发者还能够创立一个生成虚构线程的工厂来治理,具体看上面的例子例子:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};

ThreadFactory virtualThreadFactory = Thread.ofVirtual()
        .name("didispace", 0)
        .factory();

Thread factoryThread = virtualThreadFactory.newThread(runnable);
factoryThread.start;

这段代码创立了一个虚构线程工厂,每个虚构线程都会以 didispace 为前缀、以数字结尾(从 0 开始累加)的名称。

小结

下面咱们介绍了虚构线程的创立和应用,而咱们大多数 Java 开发者都基于 Spring 来开发具体业务利用,所以很多场景下可能都不太波及手工创立的操作。所以,对于虚构线程的概念,你只须要有一个根本的意识。所以,在文章的最初,做一个小结,以不便大家了解和记忆:

  • 虚构线程是由 JVM 治理的轻量级线程。
  • 虚构线程不须要任何显式调配或调度。
  • 虚构线程非常适合 I / O 密集型工作或须要大量并行性的工作。
  • 虚构线程也能够用来实现异步操作。

另外,值得注意的是,尽管虚构线程能够在并发性和可扩展性方面提供显着的帮忙,但它们并不总是适宜所有场景。有些须要大量计算的工作,并不一定在虚构线程中运行更好,因为虚构线程也有上下文切换的开。具体情况还是须要通过测试评测,以找到最优解。

如果您学习过程中如遇艰难?能够退出咱们超高品质的技术交换群,参加交换与探讨,更好的学习与提高!另外,不要走开,关注我!继续更新 Java 新个性专栏!

参考资料

  • Java 21:JEP444-Virtual-Threads
  • Spring Boot 虚构线程与 Webflux 在 JWT 验证和 MySQL 查问上的性能比拟

欢送关注我的公众号:程序猿 DD。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

正文完
 0