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 66 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() và 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 Java — Ngày 58: Optional

Optional là công cụ cho kiểu trả về — không field, không tham số, không bọc collection; chuỗi map/flatMap/filter thay kim tự tháp if; orElse luôn tính tham số còn orElseGet lười, orElseThrow cho “không có là lỗi” — và các anti-pattern isPresent + get, orElse(null).

23 thg 9, 20269 phút9
99 Ngày Spring — Ngày 58: Spring Boot Actuator

Boot 3 mặc định chỉ lộ health; bản đồ endpoint an toàn và nguy hiểm; HealthIndicator tự viết với liveness tách khỏi readiness cho Kubernetes, info từ build và git, metrics Micrometer với tag hữu hạn — và ba lớp khóa: cổng riêng, SecurityFilterChain với EndpointRequest, exclude env/heapdump/threaddump.

23 thg 9, 202610 phút5
So sánh EasyExcel và Apache Fesod: khác biệt thật nằm ở đâu?

Fesod là hậu duệ của EasyExcel, cùng engine SAX/SXSSF. Khác biệt kiểm chứng được: vòng đời dự án, POI 5.2.5 vs 5.5.1, các API mới (numRows, csv(), headerMergeStrategy) và độ bền với file xấu — không phải hiệu năng gấp nhiều lần.

23 thg 9, 20268 phút1