在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。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源