1. Giới thiệu
Java 21 là bản phát hành Hỗ trợ dài hạn (Long Term Support) được phát hành vào tháng 9 năm 2023, mang đến nhiều tính năng mới và cải tiến trong các lĩnh vực như ngôn ngữ, thư viện và các tính năng dành cho JVM.
Java 21 mang lại các cải tiến mạnh mẽ về quản lý luồng, xử lý chuỗi, hỗ trợ pattern matching và nâng cao hiệu suất với ZGC và Structured Concurrency. Các tính năng này hứa hẹn làm tăng khả năng phát triển các ứng dụng lớn, phức tạp hơn mà vẫn giữ được tính an toàn, hiệu quả và dễ đọc.
Dưới đây là danh sách các tính năng và cải tiến trong Java 21
2. Pattern Matching for Switch (Final Release)
Java 21 hoàn thiện tính năng Pattern Matching cho Switch giúp viết mã ngắn gọn và dễ đọc hơn khi xử lý nhiều trường hợp của một giá trị. Điều này hỗ trợ pattern matching không chỉ cho các lớp mà còn cho các mẫu record, sealed classes và kiểm tra điều kiện ràng buộc.
static String formatterPattern(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> obj.toString(); }; }
3. Record Patterns (Final Release)
Record Patterns trong Java 21 cho phép cấu trúc các mẫu pattern matching cho các record hỗ trợ việc giải nén các thành phần của record một cách dễ dàng và trực quan hơn.
record Point(int x, int y) {} void printSum(Object obj) { if (obj instanceof Point(int x, int y)) { System.out.println(x + y); } }
4. Unnamed Patterns and Variables (Preview)
Java 21 giới thiệu Unnamed Patterns và Unnamed Variables để bỏ qua các thành phần không cần thiết trong pattern matching giúp mã ngắn gọn hơn khi một số giá trị không quan trọng.
record Point(int x, int y) {} static void process(Point p) { if (p instanceof Point(int x, _)) { // Không quan tâm giá trị `y` System.out.println("X coordinate is: " + x); } }
5. Sequenced Collections (Final Release)
Một tính năng lớn là bổ sung các phương thức cho Sequenced Collections bao gồm các danh sách (lists), tập hợp (sets) và hàng đợi (queues) có thứ tự. Chúng cho phép thao tác rõ ràng trên các phần tử đầu và cuối của một collection có thứ tự.
SequencedCollection sc = new SequencedList<>(); sc.addFirst("First"); sc.addLast("Last");
6. Virtual Threads (Final Release)
Virtual Threads là một tính năng thuộc dự án Loom giúp tạo các luồng nhẹ và có thể mở rộng tốt hơn. Virtual Threads cho phép chúng ta tạo hàng nghìn thậm chí hàng triệu luồng trong một JVM mà không phải lo lắng về hiệu suất.
Thread.startVirtualThread(() -> { System.out.println("Running in a virtual thread"); });
7. Structured Concurrency (Preview)
Java 21 giới thiệu Structured Concurrency cung cấp các công cụ để quản lý các tác vụ đồng thời (concurrent tasks) một cách có cấu trúc, giúp dễ dàng theo dõi và quản lý tài nguyên một cách an toàn.
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { Future future1 = scope.fork(() -> fetchDataFromAPI1()); Future future2 = scope.fork(() -> fetchDataFromAPI2()); scope.join(); // Chờ cả hai tác vụ hoàn thành scope.throwIfFailed(); // Ném ra lỗi nếu có }
8. String Templates (Preview)
String Templates giúp cải thiện khả năng xử lý chuỗi bằng cách cho phép chèn biến vào chuỗi một cách an toàn và dễ dàng. Tính năng này giúp tạo chuỗi phức tạp mà không cần phải sử dụng dấu nối hoặc hàm String.format()
.
String name = "Tây Java"; int age = 18; String message = STR."My name is \{name} and I am \{age} years old.";
9. Generational ZGC (Final Release)
ZGC (Garbage Collector) đã nhận được cải tiến lớn với Generational ZGC giúp quản lý bộ nhớ hiệu quả hơn bằng cách tách các đối tượng sống lâu và ngắn hạn trong bộ nhớ heap. Điều này giúp tăng hiệu suất của việc thu gom rác mà không làm chậm ứng dụng.
10. Preview and Incubator Features
Ngoài các tính năng hoàn chỉnh, Java 21 cũng giới thiệu một số tính năng dưới dạng preview hoặc incubator:
- Scoped Values (Preview): Cho phép quản lý dữ liệu bất biến cho các thread hoặc virtual thread một cách an toàn và hiệu quả.
- Foreign Function & Memory API (Preview): Cung cấp API để giao tiếp với native code và quản lý bộ nhớ ngoài heap một cách an toàn hơn.
- Vector API (Incubator): Cung cấp khả năng viết các phép tính vector hóa (SIMD) hiệu quả hơn, giúp cải thiện hiệu suất trên các nền tảng hỗ trợ vector instructions.
11. Deprecation and Removal
Một số tính năng và API cũ đã được đánh dấu @Deprecated
hoặc đã bị xóa khỏi Java 21 để đảm bảo hiệu suất và bảo mật:
- Các lệnh, cấu trúc cũ không còn phù hợp với tiêu chuẩn hiện tại của ngôn ngữ.