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

Like (0)
速盾高防cdn的头像速盾高防cdn
Previous 2024年5月20日
Next 2024年5月20日

相关推荐

  • dollarama:加拿大最大的一元店!

    dollarama,这个名字对于加拿大的消费者来说并不陌生。它作为加拿大最大的一元店,已经在当地深入人心。那么,它到底是什么?为什么能成为加拿大最大的一元店?它又有哪些独特的商品种…

    问答 2024年4月1日
    0
  • nfnfnf是什么?从历史到现在的发展

    “nfnfnf是什么?”这个问题一直困扰着许多人,也成为当前网络行业的热门话题。从历史到现在的发展,nfnfnf已经成为了不可忽视的存在。它究竟是什么?它的历史发展如何?在当前网络…

    问答 2024年4月13日
    0
  • multisim软件的功能有哪些?

    你是否对Multisim软件的功能感到好奇?作为网络行业中备受瞩目的电路设计软件,Multisim拥有令人惊叹的多项功能。它不仅能够帮助你完成复杂的电路设计,还能与其他软件相比较,…

    问答 2024年4月15日
    0
  • 如何使用flash制作动画?

    Flash,这个名字似乎已经在我们的生活中变得如此熟悉。它是一款强大的多媒体软件,可以制作出各种精美的动画效果。那么,你是否想知道如何利用Flash来制作动画呢?今天,我将为你揭开…

    问答 2024年3月30日
    0

发表回复

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