亲爱的Java开发者朋友,你好!
今年恰好是我参加工作的第10年,也是我从事互联网后端开发的第10年,在这10年里,Java一直是我的第一编程语言。18年我曾在字节跳动工作了一年时间,当时我们使用Python和Golang语言进行后端开发。这段经历让我第一次深切地感受到了,同样的开发工作使用不同的语言会有多么大的差异。
作为开发者最重要的工具,每一门语言都有其独特的语法,会引导开发者遵循不同的编程范式,也会带来不同的编程效率和代码质量。例如当我理解了python语言的“函数即对象”思想,并且用这个思想去重构了一些代码后,我突然理解了Java8为什么要引入functional interface这个函数式接口的概念,实际上它就是函数对象在Java上的一种表达,lambda的作用也并不仅仅是帮我们简化代码,更核心的是在Java中引入函数式编程这个编程范式,帮助我们提升编码效率和质量。
学习其他语言的优点,让我更好地理解Java语言的优点,我逐渐对Java语言的发展有了更多关注。自9起,Java开启了“狂飙”模式,每半年就会发布一个短期支持的小版本,每两到三年发布一个长期支持(LTS)的大版本。20年我曾在公司里做了一次Java新版本特性的分享,当时最新的版本是Java14,最新的LTS版本是11。在那次分享的一年之后Java发布了最近的LTS版本17,而在今年九月,下一个LTS版本Java21也即将发布。
我很早就看到了Project Loom这个项目,它实现了Java的用户态线程,通过Fiber这个API来提供,但当时我并没有特别关注。大概是22年初,我突然发现这个项目已经有了质的变化:新的API Fiber已经去掉了,用户态线程直接改成了用现有的API Thread来实现,这意味着ExecutorService、Thread、Future这些我们最常用的标准并发API统统可以兼容。这个叫做“虚拟线程”的特性,将会在Java19版本里正式发布。这让我非常激动,立马下载了Java19的Early-Build JDK,开始了对虚拟线程的研究。我当时在自己的团队里做了一次分享,也比较了Java虚拟线程、Python协程和Go的goroutine的执行性能,那个demo就是手册第一篇里的第一段代码。
因此在22年底Java19正式发布后,我决定在自己的业务里尝试Java升级。现有的服务都是基于Java8构建的,我们花了一个季度的时间,完成了可行性调研、springboot升级和中间件改造、dubbo线程池替换为虚拟线程试验、核心业务服务的升级,最终完成了部分试点项目改造上线。
使用虚拟线程作为工作线程给服务带来的提升是很明显的,尤其是在请求处理较慢,比如下游服务较慢的情况下,服务稳定性相比线程池有非常大的提升。因此从今年二季度开始,我们团队开始了大规模的Java20版本升级,同时我也开始编写这本面向开发者的Java开发手册。由于我们最终目标是今年九月份的Java21,这本手册也收录了尚未发布的Java21的内容。我希望通过这本手册把Java新语言特性进行一个更加系统的研究整理,总结一些好的实践,帮助服务开发者们更快速地了解和正确使用 Java8后续版本的新特性。
我仍然记得最初接触Java8时,我的同事推荐给我《写给大忙人看的Java SE 8》(Java SE 8 for the Really Impatient)这本书。虽然这本书是专门写给没耐心的读者看的,但我依然没有看完,比作者想象的 impatient 还要更加 impatient。但无法否认的是,这本书帮我打开了Java8的大门,快速简洁的特性介绍和案例让我第一时间感受到了从Java6升级到Java8所带来的效率提升,这对我未来的工作有着很重要的指导意义。我写的这本Java21手册也会采用同样的风格,快速简洁地介绍特性用法和案例,只挑重点详细介绍,不常用的特性会一笔带过。
最近这些年,随着新语言的出现和云原生的发展,Java语言也变得越来越“现代化”,借鉴了很多其他语言的优点,引入了更多便捷可靠的语法,执行上也变得越来越轻量化。你可能还没有安装过比Java8更高的版本,但我相信你一定听说过Java的模块系统,也一定听说过现在有一个很牛逼的垃圾回收器叫做ZGC,可能还听说过对象可以用 var 声明了,也应该知道了最近Java新出了虚拟线程,这些内容你都会在这本手册的相关章节中详细了解到。
这篇手册会按照语言的各个方面来聚合相关的新特性和新变化,总共分为十篇,包括:
1. 线程的底层新实现,虚拟线程
2. 并发编程方面一系列酷炫又实用的新API
3. Java在变量声明和类型定义方面的新语法和新类型
4. 流程控制的更新优化,以及新的模式匹配语法
5. 字符串相关操作和工具的增强
6. 集合、网络库、监控工具的新API介绍
7. 对JDK和Java项目结构进行较大重构的模块系统
8. Java在垃圾回收器领域的发展
9. Java其他重要的功能更新和性能优化
10. 提升Java研发效率、扩展Java应用场景的脚本式开发
实话实说,系统地梳理Java从9到21这么多版本的特性,确实是个不小的体力活,很多特性的资料和实践都很难直接查到。能够完成这篇手册,一是需要投入大量的时间和精力,二也是需要一些信念感来支持。对特性的解读我更多参考的是官方资料,里面也有很多个人的经验和实践,如果这本手册中有错误和不完善的点,期望得到你的斧正,欢迎交流讨论。本手册源码可查看:github.com/daqingllm/J… 点击查看原文即可访问。
废话不多说,让我们开始吧!