为什么Java官方不推荐池化虚拟线程?
创始人
2025-07-02 18:20:40
0

一句话定义

虚拟线程是在用户空间(而非内核)中实现的轻量级线程,其创建、调度和销毁由应用程序自己管理,而不依赖于操作系统。

与传统线程区别

传统的线程(也称为物理线程或内核线程)由操作系统内核调度和管理,每个线程都需要分配独立的内存栈和寄存器上下文。这种线程调度的开销较大,并且线程数量受限于操作系统的限制。

实现方式

Java 虚拟线程使用的是用户态线程实现,用户态线程是由运行时库实现的线程模型,应用程序可以在用户空间中创建和管理多个线程,而无需涉及操作系统内核。

特点

虚拟线程具有以下优点:

  1. 轻量级:虚拟线程的创建和切换开销相对较低,因为它们在用户空间中实现,不需要操作系统的干预。
  2. 高并发性:虚拟线程可以实现更高级别的并发性,应用程序可以创建大量的虚拟线程,而不受操作系统线程数量的限制。
  3. 更好的资源利用率:由于虚拟线程是在用户空间中实现的,可以使用更少的物理线程来完成相同数量的任务,从而提供更好的资源利用率。
  4. 易于编程:相对于传统线程,虚拟线程的编程模型更简单、直观,可以通过协程或者用户态线程库来实现。

官方使用建议

开发人员通常会将应用程序代码从传统的基于线程池的ExecutorService迁移到基于虚拟线程的ExecutorService。线程池就像其他资源池一样,旨在共享昂贵的资源,但虚拟线程并不昂贵,因此无需对它们进行池化。

官方示例:

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 10_000).forEach(i -> {
        executor.submit(() -> {
            Thread.sleep(Duration.ofSeconds(1));
            return i;
        });
    });
}  // executor.close() is called implicitly, and waits


相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...