【JDK21】初体验

news/2024/10/23 9:33:19/

IDEA 2023.2.2已支持JDK21

Java 21发布,IntelliJ IDEA 2023.2.2已完美支持。
想要开发Java 21代码的开发者可以升级了!

Java新特性

Java 9 - 21:新特性解读

虚拟线程

虚拟线程创建

(1)使用静态构建器方法
(2)使用Thread.ofVirtual()
(3)使用虚拟线程工厂
(4)与ExecutorService结合使用

public static void main(String[] args) throws InterruptedException {Runnable runnable = () -> {System.out.println("Hello, jdk21");};// 使用静态构建器方法Thread.startVirtualThread(runnable);// 使用Thread.ofVirtual()Thread.ofVirtual().name("jdk21-virtual-thread").start(runnable);// 使用虚拟线程工厂ThreadFactory virtualThreadFactory = Thread.ofVirtual().name("jdk21", 0).factory();Thread factoryThread = virtualThreadFactory.newThread(runnable);factoryThread.start();// 与ExecutorService结合使用try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {for (int i = 0; i < 100; i++) {executorService.submit(runnable);}}ExecutorService executorService = Executors.newThreadPerTaskExecutor(virtualThreadFactory);for (int i = 0; i < 10; i++) {executorService.submit(() -> {System.out.println(Thread.currentThread().getName() + " is running...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + " is done.");});}executorService.shutdown();executorService.awaitTermination(1, TimeUnit.MINUTES);}

虚拟线程测试

public static void main(String[] args) {int timesCount = 1000;long l1 = System.currentTimeMillis();for (int i = 0; i < timesCount; i++) {int finalI = i;Thread.ofPlatform().name("平台线程").start(() -> {System.out.println("线程名称:" + Thread.currentThread().getName() + "线程ID" + Thread.currentThread().threadId() + "执行第" + finalI + "个平台线程");});}long l2 = System.currentTimeMillis();for (int i = 0; i < timesCount; i++) {int finalI = i;Thread.ofVirtual().name("虚拟线程").start(() -> {System.out.println("线程名称:" + Thread.currentThread().getName() + "线程ID" + Thread.currentThread().threadId() + "执行第" + finalI + "个平台线程");});}System.out.println("线程分别执行 " + timesCount + " 次压测...");System.out.println("平台线程执行耗时:" + (System.currentTimeMillis() - l1) + "毫秒");System.out.println("虚拟线程执行耗时:" + (System.currentTimeMillis() - l2) + "毫秒");try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}}

http://www.ppmy.cn/news/1152739.html

相关文章

RK平台使用MP4视频做开机动画以及卡顿问题

rk平台android11以后系统都可以使用MP4格式的视频做开机动画,系统源码里面默认使用的是ts格式的视频,其实使用mp4的视频也是可以的。具体修改如下: diff --git a/frameworks/base/cmds/bootanimation/BootAnimation.cpp b/frameworks/base/cmds/bootanimation/BootAnimat…

GitLab使用步骤

GitLab使用步骤 1 注册用户 1 访问&#xff1a;http://10.0.0.203/users/sign_up地址 2 填入注册信息&#xff0c;注册成功&#xff0c;需要管理员审核 3 用root登录&#xff0c;地址&#xff1a;http://10.0.0.203/users/sign_in账号&#xff1a;root密码&#xff1a;xxxx…

使用实验室超声波清洗机有哪些注意事项?

常人很难想象实验室超声波清洗机肩负的重要职责&#xff0c;毕竟日常接触的机会甚少&#xff0c;无法知晓清洗机在实验室中扮演的角色&#xff0c;自然无从得知它在业内所处的地位。先进的实验室超声波清洗机总能让客户眼前一亮&#xff0c;毕竟技术的迭代意味着性能的升级&…

Zookeeper分布式一致性协议ZAB源码剖析

文章目录 1、ZAB协议介绍2、消息广播 1、ZAB协议介绍 ZAB 协议全称&#xff1a;Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子广播协议&#xff09;。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面&#xff0c;Zookeeper 并…

Linux中scp命令复制文件

scp命令是在Linux中用于在本地主机和远程主机之间进行安全传输文件的命令。下面是使用scp命令的语法&#xff1a; scp [参数] [来源路径] [目标路径]参数&#xff1a; -r&#xff1a;递归复制整个目录。-P&#xff1a;指定远程主机的端口。-p&#xff1a;保留原文件的修改时间…

AMD AFMF不但能用在游戏,也适用于视频

近期AMD发布了AMD Software Adrenalin Edition预览版驱动程序&#xff0c;增加了对平滑移动帧&#xff08;AMD Fluid Motion Frames&#xff0c;AFMF&#xff09;功能的支持&#xff0c;也就是AMD的“帧生成”技术&#xff0c;与DLSS 3类似&#xff0c;作为FidelityFX Super Re…

docker-compose安装和使用(自启、redis、mysql、rabbitmq、activemq、es、nginx、java应用)

1.在线安装docker-compose&#xff1a; 参考官网&#xff1a;https://docs.docker.com/compose/install/other/ docker-compose安装及简单入门 [Docker] docker-compose使用教程 Docker系列教程22-docker-compose.yml常用命令 # 安装&#xff08;加速下载https://ghproxy.…

【docker - 安装】windows 10 专业版 安装docker,以及 WSL kernel version too low 解决方案

一、开启 Hyper-V 二、下载 docker 三、安装 docker 四、问题 Stage 1&#xff1a;打开 powershell&#xff0c;并执行 Stage 2&#xff1a;下载Linux内核更新包&#xff0c;并安装 Stage 3&#xff1a;将 WSL 2 设置为默认版本 Stage 4&#xff1a;安装所选的 Linux 分…