Backend

Java hiện đại: Những tính năng đáng giá từ Java 17 đến Java 21

SSite Admin
28 tháng 07, 2026 2 phút đọc 38 lượt xem
Java hiện đại: Những tính năng đáng giá từ Java 17 đến Java 21

Trong vài năm gần đây, Java thay đổi với tốc độ chóng mặt. Hai bản LTS gần nhất — Java 17 (2021) và Java 21 (2023) — mang đến hàng loạt tính năng giúp code ngắn gọn, an toàn và hiệu năng cao hơn hẳn. Bài viết này điểm qua những tính năng đáng giá nhất mà bạn nên áp dụng ngay vào dự án của mình.

Records: tạm biệt boilerplate

Trước đây, một class dữ liệu đơn giản cần constructor, getter, equals(), hashCode()toString() — dễ lên tới vài chục dòng. Với record, tất cả gói gọn trong một dòng:

public record OrderEvent(String id, BigDecimal amount, Instant createdAt) {}

var event = new OrderEvent("ORD-001", new BigDecimal("199000"), Instant.now());
System.out.println(event.amount()); // 199000

Record là immutable, tự sinh đầy đủ các phương thức chuẩn và thể hiện rõ ý đồ: đây là dữ liệu, không phải hành vi.

Sealed classes và pattern matching

Sealed interface cho phép bạn kiểm soát chính xác những class nào được phép implement. Kết hợp với pattern matching cho switch, compiler sẽ kiểm tra tính đầy đủ — không cần default, và không bao giờ quên xử lý một nhánh:

public sealed interface Shape permits Circle, Rectangle {}
public record Circle(double radius) implements Shape {}
public record Rectangle(double width, double height) implements Shape {}

double area(Shape shape) {
    return switch (shape) {
        case Circle c    -> Math.PI * c.radius() * c.radius();
        case Rectangle r -> r.width() * r.height();
    };
}
Tách cà phê bên bàn làm việc của lập trình viên Java

Virtual threads: concurrency cho tất cả mọi người

Đây là tính năng lớn nhất của Java 21. Virtual thread nhẹ đến mức bạn có thể tạo cả triệu thread mà không lo cạn tài nguyên — mô hình thread-per-request quay trở lại, đơn giản mà vẫn scale tốt:

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 10_000).forEach(i ->
        executor.submit(() -> {
            Thread.sleep(Duration.ofSeconds(1));
            return fetchOrder(i);
        }));
}

10.000 task chạy đồng thời chỉ tốn vài MB bộ nhớ. Điểm hay nhất: bạn không phải học reactive programming — cứ viết code blocking bình thường, JVM lo phần còn lại.

Những cải tiến nhỏ nhưng chất

  • Text block — viết chuỗi nhiều dòng (JSON, SQL) tự nhiên với cú pháp """.

  • Pattern matching cho instanceof — hết thời ép kiểu thủ công.

  • SequencedCollection (Java 21) — API thống nhất với getFirst() / getLast().

  • Helpful NullPointerException — thông báo lỗi chỉ đích danh biến nào null.

Kết luận

Nếu dự án của bạn vẫn ở Java 8 hay 11, hãy lên kế hoạch nâng cấp thẳng lên Java 21: hệ sinh thái đã sẵn sàng, các framework lớn như Spring Boot 3 đều yêu cầu Java 17+ và tận dụng tốt virtual threads. Chi phí nâng cấp nhỏ hơn nhiều so với giá trị nhận được.

S

Site Admin

Engineer and writer. Building things with TypeScript and distributed systems.

Bình luận (0)

Bạn cần đăng nhập bằng Google để bình luận.

Hãy là người bình luận đầu tiên.

Bài viết liên quan

99 Ngày Spring — Ngày 14: Bean Validation — @Valid & bộ constraint chuẩn

Ngày 14 của 99 Ngày Spring: Bean Validation khai báo luật ngay trên DTO — @Valid kích hoạt, bộ constraint chuẩn (@NotBlank vs @NotEmpty vs @NotNull, @Size, @Email, @Min/@Max), bẫy int vs Integer, validate object lồng nhau không tự lan, và lỗi 400 gom một lượt.

10 thg 8, 20265 phút0
99 Ngày Java — Ngày 14: Kế thừa (Inheritance)

Ngày 14 của 99 Ngày Java: extends trao gia tài từ lớp cha, override với @Override và super., thứ tự khai sinh cha trước con sau qua super(...), protected trả nợ Ngày 13, và phép thử is-a vs has-a — khi nào nên composition thay vì kế thừa.

10 thg 8, 20266 phút0
99 Ngày Spring — Ngày 13: @RequestBody & DTO — đừng công khai entity ra API

Ngày 13 của 99 Ngày Spring: @RequestBody + Jackson deserialize JSON thành object, DTO là hợp đồng API — chặn lỗ hổng mass assignment chiều vào và rò rỉ dữ liệu chiều ra, request/response DTO khác nhau là bình thường, và Jackson annotations tinh chỉnh hợp đồng JSON.

9 thg 8, 20266 phút9