Java 核心的应用场景

作为主流的服务器端开发语言之一,开发高并发的应用一直是 Java 核心的应用场景。线程是 Java 中并发的基本单元。开发高并发的应用,离不开对线程的高效使用。很多人一听到多线程开发,就有种头大的感觉。但是,在日常开发中都会直接或间接地与线程打交道。线程是绕不开的难题。

多线程开发确实不容易。如果可以选择,大家肯定都会选择同步单线程的方式,而不是异步多线程。同步单线程的方式对开发人员很友好。代码可读性好,流程控制和异常处理非常清晰,调试和性能调优都非常简单。但是同步单线程的性能并不理想,线程的创建非常耗时,占用的资源多,很容易发生阻塞。

异步多线程方式的可伸缩性更好,可以达到很高的性能。但问题是对开发人员太不友好,代码的可读性很差,调试和性能调优都非常困难。在这一点上,使用过反应式编程(Reactive Programming)框架的人都应该深有体会。除此之外,反应式编程框架对代码的侵入性很强,一旦用了之后就很难迁移到其他方式。

所以,Java 开发人员面临一个两难的处境。为了应用的性能,不得不硬着头皮去应对复杂的多线程开发。有了虚拟线程之后,Java 开发人员终于有了一个两全其美的选项。那就是,以同步方式来编写,以异步方式来运行

线程的API java.lang.Thread 从 Java 1.0 就已经存在。Java 的早期版本使用的是绿色线程。绿色线程由虚拟机来调度,在不依赖操作系统支持的情况下,模拟出多线程的环境。实际上,早期的虚拟机实现仅使用单个操作系统线程。绿色线程在 Java 1.2 和 1.3 的时候退出了历史舞台。也就是在那个时候,Thread 类进行了一次比较大的修改,废弃了几个不安全的线程方法,包括 stop() 、suspend() 和 resume()。从那之后,Java 并没有对线程实现进行大的改动,直到 Java 19 中以预览功能的形式首次引入了虚拟线程(virtual thread)。从某种程度上来说,这意味着绿色线程的回归。

在 Java 19 之前,Java 中只有一种线程。现在称之为平台线程(platform thread)。平台线程是底层操作系统提供的线程实现的一个封装。每个平台线程都有一个操作系统的内核线程与之对应。

对操作系统来说,线程是一个稀缺资源。与之对应的 Java 平台线程也同样是稀缺资源。这种稀缺性体现在每个操作系统所能支持的线程数量存在一个上限。每个线程创建的成本比较高。创建线程也比较耗时。

由于线程的稀缺性,应用程序在使用线程时就必须非常谨慎。为了达到最佳的性能,必须对有限的线程的使用方式进行精细的控制。我们在日常开发中经常使用的一些多线程技术,其根源都在于线程的稀缺性。

  • 因为线程是稀缺的,创建的成本较高,所以需要使用线程池。线程池的本质是稀缺资源的复用。
  • 对于处理海量请求的服务器来说,不可能对每个请求都创建一个平台线程来处理。

反应式编程框架通过非阻塞 I/O和异步编程模式,能够达到极高的性能。但是换来的是复杂和难以理解的编程模型。

设想一下,如果线程不再稀缺,想用多少就可以用多少,那很多困扰多线程开发的问题就不复存在了。

  • 当线程数量不再是个问题,就不再需要线程池来复用。在需要的时候创建线程,任务执行完成之后自动销毁。
  • 在实现 Web 服务器时,每个请求直接用一个线程来处理。再也不需要复杂的线程切换,可以极大地简化代码的开发和调试。

有了虚拟线程之后,这就变成了现实。

有句话叫:贫穷限制了你的想象。这句话对 Java 应用的线程也是适用的。线程数量限制了 Java 的多线程开发。当缺钱的时候,总是不得不精打细算,把有限的资源投入到更重要的事情上;当金钱不再是问题时,考虑很多问题时就会简单很多。线程的数量也是一样的。当线程数量受限时,应用就必须采用复杂的方式来管理这些线程,以达到最佳的性能。当线程数量不再是一个问题时,处理线程就可以很随意。代码实现会简单很多,代码的可读性和可维护性也会大大提升。

当然了,虚拟线程也不是万灵药。虚拟线程只适合于 I/O 等待较多的场景,对于 CPU 密集的场景并不适用。

虚拟线程的出现,对 Java 多线程开发是一个巨大的改进。虚拟线程将是 Java 的一个杀手锏特性。之后的多线程开发,离不开对虚拟线程的了解。

虚拟线程在 Java 21 中成为正式功能。Java 21 是 Java 目前最新的 LTS 版本,也是很多 Java 应用升级的目标版本。即便是没有升级到 Java 21,提早学习和掌握虚拟线程,可以让你在今后的开发中把握先机。

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/76367.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年5月20日 下午6:06
下一篇 2024年5月20日 下午11:11

相关推荐

  • 为什么无法登录QQ?

    QQ,这个我们每天都会使用的网络平台,却有时候让我们感到头疼。有时候我们不知道为什么无法登录QQ,就像是被拒绝进入一个神秘的世界。那么,为什么无法登录QQ?是因为我们不了解它吗?还…

    问答 2024年4月9日
    0
  • 如何利用笛卡儿积优化产品设计?

    在当今快节奏的网络行业,产品设计的重要性不言而喻。然而,如何在众多竞争对手中脱颖而出,成为每个企业都需要面对的难题。或许你已经听说过笛卡儿积这个概念,但它究竟是什么?它又如何应用于…

    问答 2024年4月4日
    0
  • 如何选择最适合你的选色器?

    你是否曾经为了寻找最适合你的选色器而苦恼?选色器作为网络行业中必不可少的工具,其功能和用途却让人眼花缭乱。什么是选色器?它究竟有哪些特点?如何根据自己的需求选择最合适的选色器?接下…

    问答 2024年4月1日
    0
  • 回档技术的作用及实现方式

    在如今快速发展的网络行业中,技术的进步和创新不断推动着行业的发展。而“回档技术”作为一种备受关注的技术,其作用和实现方式备受瞩目。那么,什么是回档技术?它又有哪些作用与优势?如何实…

    问答 2024年4月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注