Java 很强,但是 Java 的路还很长

323 天前
 karottc

看了隔壁吹爆 java21 的帖子之后,我去详细研读了下 Java21 的新特性。

首先承认,这么多年了,Java 的强已经被证明了,毋庸质疑,但是 Java 也有各种弱点(这里就不说了)。

其次,Java21 两大更新:虚拟线程正式版,分代 ZGC 。确实也非常的好,但是远没到吹爆的程度。

尤其是虚拟线程,这个光秃秃的虚拟线程,如果没有配套的话,完全不足以促使现有框架大规模适配,这是我仔细阅读 Java21 相关 JEP 之后的感觉。

因为和虚拟线程配套的两个重要特性在 Java21 上还是预览版,还不是正式版,所以目前虚拟线程场景虽然正式版了,但是场景还很受限。

和虚拟线程配套的两个重要特性是:

  1. 结构性并发: https://openjdk.org/jeps/453
  2. 范围值: https://openjdk.org/jeps/446

有兴趣的朋友,我也强烈建议大家仔细阅读下,读完了,一定回过头来同意我上面的观点——虚拟线程虽好,但还需要完善配套。

只有一个虚拟线程,现有框架就不会大量跟进,那么生态就不会有大变化,基本还是还目前一样。

然而等这两个配套上正式,框架肯定是基于 LTS 开发,然而下个 LTS 版本是 2 年后了,也就是 2025 年 9 月。又是几年过去了。

不过,很巧的是,2025 年正好是 Java 的 30 岁( 1995 年开始算),希望到时候 30 而立的 Java 正能立起来吧。

6496 次点击
所在节点    Java
42 条回复
mmdsun
323 天前
Spring 6 、spring boot 已经可以用了。

spring:
thread-executor: virtual

https://www.baeldung.com/spring-6-virtual-threads
mmdsun
323 天前
Akitora
323 天前
结构性并发很有 kt 的味儿
urnoob
323 天前
Java 的世界里总有大神能给你玩出花来。
Leviathann
323 天前
roman 对比 virtual thread 和 kotlin coroutine ,认为 kotlin coroutine 其中有一个优势就是 structured concurrency by default ,也就是 correct by default

而 virtual thread 则要额外使用一些 api ,正确的事却需要额外的工作,但是程序员天然地倾向于选择更不繁琐更少样板代码的实现。
WispZhan
323 天前
@Leviathann roman 也说了,这两者设计目标就不一样
james122333
323 天前
非常好 工作可以尝试 但私下继续玩我的 shell
java 还是会继续肥肿下去
mingring
323 天前
java 的最终形态应该是 C#。
franklinre
323 天前
是不是虚拟线程出来了,webflux 就不需要了?
bthulu
323 天前
C#支持 Java 虚拟机是不是最优解?
boatrain1111
323 天前
@franklinre 希望能革 webflux 的命
dragondove
323 天前
为啥每次一提到 java ,就会有人过来讲 C#。是 jvm 平台上的语言不够多还是都不够好?连 jvm 平台上的其他语言都干不过 java ,凭啥 C#来到 jvm 就能干掉 java 啊。而且 C#很难转到 jvm 平台,两者的泛型实现就不一致。
dragondove
323 天前
个人认为 java 保持语法的简单可以有效限制 jvm 搞出什么大变化,这对于其他运行在 jvm 上的语言是非常友好的。
karottc
323 天前
@franklinre 很有可能,协程类(虚拟线程)的同步写法,能达到 webflux 的异步效果,复杂的就被淘汰了
nothingistrue
323 天前
外行人看 Java ,首先要干得事是区分 Oracle Java 和市场主流 Java ,再精细点还要区分欧美社区 Java 跟国内市场 Java 。
@dragondove #12 .NET 平台(至少是目前)不如 Java 平台,但 Oracle Java 不如微软 C#。
mmdsun
323 天前
@franklinre 并不是,虚拟线程只是对 ReactiveX-style APIs 的补充和增加。

反应式编程范式有很多优点。最早起源于微软的 Rx.NET ,那个时候也有协程了。干嘛还还开发各种 Rx 库呢。
而且 webflux 你也可以自己定义线程换成虚拟线程的。
dtgxx
323 天前
看了帖子之后 感觉你们 java 水平都好高啊。。
mmdsun
323 天前
@mingring
@bthulu

C#风格 async /await 确实好。但如果 Java 要这么改,会对兼容性破坏很大。
相反 Java 这套虚拟线程的升级成本很低,而且相比 C#这种 stateless coroutine ,有栈协程的功能更强大,也调试更方便。

async /await 还有感染函数之类的问题没有解决。
voidmnwzp
323 天前
你说的对,但 jdk8 是美国 oracle 公司 2014 年 3 月份发布的 java 开发工具包.......
abcbuzhiming
323 天前
@bthulu java 的虚拟机其实因为太早出现,历史包袱非常重,不是一个好的选择

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/950472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX