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的头像速盾高防cdn
上一篇 2024年5月20日
下一篇 2024年5月20日

相关推荐

  • 如何快速学习网页制作?

    想要学习网页制作,但又不知道从何开始?不要担心,本文将为你介绍如何快速学习网页制作的有效方法和实践建议。首先,让我们来了解一下网页制作的重要性。随着互联网的发展,网页已经成为人们获…

    问答 2024年3月23日
    0
  • 打破黑客潜伏:应对横向移动威胁

    NotPetya 攻击(2017年):这次极具破坏性的勒索软件攻击利用了乌克兰税务会计软件的漏洞。攻击者通过发送钓鱼电子邮件获取了初始访问权限,随后利用窃取的凭据在网络中横向移动,…

    2024年6月7日
    0
  • 如何使用newnet进行网络加速?

    网络加速是如今越来越受欢迎的服务,它可以帮助用户解决网络延迟、卡顿等问题,提高上网体验。而在众多网络加速服务中,newnet无疑是备受关注的一种。那么,什么是newnet?它有什么…

    问答 2024年3月30日
    0
  • 回顾性研究的意义及其应用场景

    回顾性研究,是一种重要的研究方法,它可以帮助我们更深入地了解过去发生的事件和现象。在网络行业中,回顾性研究也有着广泛的应用场景。那么,什么是回顾性研究?它又有着怎样的意义和重要性?…

    问答 2024年3月24日
    0

发表回复

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