前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >JDK21的这个特性,让我丢掉Java 8,你确定不来试试吗?

JDK21的这个特性,让我丢掉Java 8,你确定不来试试吗?

作者头像
大风写全栈
发布2024-12-27 20:48:23
发布2024-12-27 20:48:23
18300
代码可运行
举报
文章被收录于专栏:锤子代码锤子代码
运行总次数:0
代码可运行

别坚持Java 8了

业界长期坚持用Java 8,不久之前我也是这么坚持的。

但在用了JDK21之后,发现是真香啊。

只是要从老项目的Java 8升级到JDK21难如登天。

也只能一步一步来。

比如先从Java 8升级到JDK 11或者JDK 17。

如果非Web项目,项目不大的话,升级难度还能接受。

如果是Web项目且关联众多,那还是坚持Java 8吧。

只是在开始新项目的时候,可以考虑一下JDK21。

毕竟作为LTS版本,在BUG修复,新特性方面还是很有吸引力。

加之现在Spring Boot 3最低支持JDK17,升级到JDK21也就顺手的事,何乐而不为呢。

下面聊一下JDK21主要更新了哪些内容。

主要更新内容

  1. 虚拟线程正式发布
  2. 模式匹配 for switch 表达式(预览);
  3. 字符串模板(预览);
  4. 外部存储器访问 API(第二阶段孵化);
  5. Vector API(第四阶段孵化);
  6. Structured Concurrency 改进;
  7. Record Patterns(第三阶段孵化);
  8. Switch Expressions 默认行为增强。

其中影响最大的是虚拟线程的GA,下面会简述一下虚拟线程的好处和给个🌰。

来个🌰

虚拟线程可以理解为,JVM申请了很多平台线程(数量有限,极其昂贵),然后在平台线程之上增加了一层,这一层也就是虚拟线程。

简单来说,比如JVM申请了5个盒子,计算机能分配给JVM的就只有这5个盒子。

有了5个盒子之后,我们可以往这5个盒子里面装无数个小盒子。

这些小盒子很轻量,不需要池化,用完就丢。

最主要调度过程,我们不用管。

JVM使用了FJ框架帮我们调度虚拟线程,处理虚拟线程的执行,调度,终止等等。

创建虚拟线程:

代码语言:javascript
代码运行次数:0
复制
// 随便来个
Runnable runnable = () -> System.out.println(Thread.currentThread().threadId());
// 虚拟线程
Thread virtual = Thread.ofVirtual().name("czdm").unstarted(runnable);
virtual.start();
// 平台线程
Thread test = Thread.ofPlatform().name("czdm").unstarted(runnable);
test.start();

快速创建并启动:

代码语言:javascript
代码运行次数:0
复制
Runnable runnable = () -> System.out.println(Thread.currentThread().threadId());
Thread thread = Thread.startVirtualThread(runnable);

判断当前线程是否为虚拟线程:

代码语言:javascript
代码运行次数:0
复制
Thread.isVirtual();

平时用虚拟线程,我一般喜欢这么写,把虚拟线程的任务装到一个队列里面。

一起执行:

代码语言:javascript
代码运行次数:0
复制
  var threads = IntStream.range(0, 100).mapToObj(index -> Thread.ofVirtual().unstarted(() -> {
    System.out.println(Thread.currentThread());
    try {
      Thread.sleep(5);
    } catch (InterruptedException e) {
      throw new RuntimeException(e);
    }
    System.out.println(Thread.currentThread());
  })).toList();

  threads.forEach(Thread::start);
  for (Thread thread : threads) {
    thread.join();
  }

如果你使用的是Spring Boot 3.2以上版本,这样配置,可以很方便的在Spring Boot中启用虚拟线程:

代码语言:javascript
代码运行次数:0
复制
spring:
  threads:
    virtual:
      enabled: true

这不去试试?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锤子代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档