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