Java

理解虚拟线程

理解虚拟线程 #

JDK21中正式引入了虚拟线程,这是Java标准库首次正式支持用户态轻量级线程,它的出现让Java并发编程更加简单高效。这篇文章将深入探讨虚拟线程的概念和原理,帮助你更好的理解和使用虚拟线程。

为什么需要虚拟线程 #

在虚拟线程出现之前,Java中主要依靠线程(Thread)实现并发编程,通过将多个任务分配给多个线程来实现并发执行,每个线程具有独立的执行栈,一个线程就是一个并发执行单元。 而Java语言中的线程和操作系统中的线程是一一对应的,Java代码中每创建一个线程,JVM都会调用操作系统的API来创建一个操作系统线程并映射到Java线程。这种并发方式有以下特点:

...

JDK21新特性

笔者在过去主要使用的JDK版本是JDK8,最近在学习最新的JDK长期支持版本——JDK21,本文将简要记录一下JDK21相比于JDK8的一些新特性,对于一些比较有意思的新特性也会在后续文章中逐步展开研究。

var 关键字局部变量推断 #

// 仅限局部变量
var name = "zhangsan";
var age = 18;
var isMan = true;
var list = new ArrayList<String>();
var map = new HashMap<String, String>();

switch 表达式增强 #


// 假设有枚举定义为
public enum Direction {

    EAST,
    SOUTH,
    WEST,
    NORTH,
    NORTHWEST,
    ;
}

// switch 表达式为变量赋值
var witchCity = switch (direction) {
    case EAST, NORTHWEST -> "成都";
    case WEST -> "上海";
    case SOUTH -> "广州";
    case NORTH -> "北京";
    default -> throw new IllegalArgumentException("Invalid direction: " + direction);
};
// yield 关键字返回值,并跳出switch表达式(相当于break)
var witchCity = switch (direction) {
    case EAST, NORTHWEST:
        System.out.println("成都");
        yield "成都";
    case WEST:
        System.out.println("上海");
        yield "上海";
    case SOUTH:
        System.out.println("广州");
        yield "广州";
    case NORTH:
        System.out.println("北京");
        yield "北京";
    default:
        system.out.println("未知");
        yield "未知";
};
// yield 关键字结合lambda表达式
var witchCity = switch (direction) {
    case EAST, NORTHWEST -> {
        System.out.println("成都");
        yield "成都";
    }
    case WEST -> {
        System.out.println("上海");
        yield "上海";
    }
    case SOUTH -> {
        System.out.println("广州");
        yield "广州";
    }
    case NORTH -> {
        System.out.println("北京");
        yield "北京";
    }
    default -> {
        System.out.println("未知");
        yield "未知";
    }
};

记录类(record class) #

记录类的使用场景是存储数据,尤其是那些纯粹做数据传输的对象如DTO等,其每个字段都是不可变的。

...