Các Tính Năng Chính Được Giới Thiệu Trong Java 11 - Sam86 Club Choi Game Bài

| Mar 11, 2025 min read

Ngày 09 tháng 8 năm 2024 - Máy tính

Bài viết này sẽ tập trung xem xét các tính năng chính mà Java 11 đã giới thiệu.

1. Giao Diện Mới Cho Khách Hàng HTTP

Java 11 đã ra mắt giao diện khách hàng HTTP mới (bao gồm ba lớp chính là HttpClient, HttpRequestHttpResponse) nhằm thay thế API HttpURLConnection hiện tại.

API HttpURLConnection hiện tại tồn tại nhiều vấn đề:

  • Thiết Kế Cũ
    Thiết kế của nó đã xem xét nhiều giao thức, nhưng một số giao thức này giờ đã không còn hiệu lực (như ftp, gopher, v.v.).

  • Không Hỗ Trợ Đặc Điểm Web Hiện Đại
    API chỉ hỗ trợ HTTP/1.1, không hỗ trợ HTTP/2 hay WebSocket.

  • Không Có Bộ Quản Lý Kết Nối
    Không có khả năng quản lý kết nối thông qua bộ nhớ đệm.

  • Khó Sử Dụng
    API phức tạp, yêu cầu nhà phát triển phải xử lý Rik68 Club Game Bài Tiền Thật dòng đầu vào và đầu ra thủ công cũng như giải quyết lỗi một cách cồng kềnh.

  • Hiệu Suất Thấp
    Làm việc theo chế độ đồng bộ (một luồng xử lý một yêu cầu và phản hồi), không hỗ trợ chế độ bất đồng bộ.

  • Không An Toàn Với Đa Luồng
    Lớp HttpURLConnection không bất biến và không an toàn với đa luồng.

Do đó, Java 11 đã giới thiệu giao diện khách hàng HTTP mới để thay thế HttpURLConnection. So với HttpURLConnection, API mới có những ưu điểm sau:

  • Thiết Kế Giao Diện Đơn Giản
    Cung cấp giao diện lập trình đơn giản hơn (cho phép gọi chuỗi, giúp xây dựng và gửi yêu cầu dễ dàng hơn).

  • Hỗ Trợ HTTP/2
    Hầu hết các đặc điểm của HTTP/2 đều được hỗ trợ, bao gồm đa plexing, cải thiện hiệu suất và hiệu quả.

  • Hỗ Trợ Đồng Bộ Và Bất Đồng Bộ
    Đồng thời hỗ trợ cả hai phương thức truyền dữ liệu, cho phép linh hoạt trong việc sử dụng.

  • Hỗ Trợ WebSocket
    Cho phép thiết lập kết nối lâu dài và giao tiếp hai chiều.

  • Cơ Chế Xử Lý Lỗi Cải Tiến
    Khi yêu cầu HTTP thất bại, có thể hiểu rõ nguyên nhân thông qua cơ chế ngoại lệ.

Dưới đây là một ví dụ đơn giản:

// src/main/java/NewHTTPClientAPITest.java
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;

public class NewHTTPClientAPITest {
    public static void main(String[] args) throws IOException, InterruptedException {
        // Xây dựng đối tượng HttpClient với thời gian chờ 1 phút
        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofMinutes(1))
                .build();
        
        // Xây dựng đối tượng HttpRequest với URI và phương thức GET
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com"))
                .GET()
                .build();

        // Yêu cầu đồng bộ và in nội dung phản hồi
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());

        // Yêu cầu bất đồng bộ và xử lý phản hồi
        CompletableFuture<HttpResponse<String>> futureResponse = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
        futureResponse.thenApply(HttpResponse::body)
                     .thenAccept(System.out::println)
                     .join();
    }
}

Trong ví dụ trên, chúng ta đã tạo một đối tượng HttpClient, xây dựng một yêu cầu HttpRequest, và gửi yêu cầu này bằng cách sử dụng cả hai phương thức đồng bộ và bất đồng bộ.

2. Cải Tiến String API

Java 11 đã cải tiến API của lớp String bằng cách thêm các phương thức sau:

  • isBlank()
    Phương thức này kiểm tra xem chuỗi có phải là chuỗi rỗng hay không, nếu đúng thì trả về true.

  • lines()
    Phương thức này chia chuỗi thành các dòng và trả về dưới dạng Stream.

  • strip(), stripLeading(), stripTrailing()
    Loại bỏ khoảng trắng ở đầu và cuối chuỗi (hoặc chỉ ở đầu hoặc cuối tùy chọn).

  • repeat(int)
    Lặp lại chuỗi một số lần nhất định.

Ví dụ minh họa:

// src/main/java/StringAPIEnhancementsTest.java
import java.util.stream.Collectors;

public class StringAPIEnhancementsTest {
    public static void main(String[] args) {
        // Sử dụng isBlank()
        System.out.println(" \n\t ".isBlank()); // true
        
        // Sử dụng lines()
        System.out.println("Hello\nWorld!".lines().collect(Collectors.joining(", "))); // Hello, World!
        
        // Sử dụng strip()
        System.out.println(" \n\t\n\r  Xin chào, thế giới! ".strip()); // Xin chào, thế giới!
        
        // Sử dụng stripLeading()
        System.out.println(" \n\t\n\r  Xin chào, thế giới! ".stripLeading()); // Xin chào, thế giới! 
        
        // Sử dụng stripTrailing()
        System.out.println(" \n\t\n\r  Xin chào, thế giới! ".stripTrailing()); //  \n\t\n\r  Xin chào, thế giới!
        
        // Sử dụng repeat()
        System.out.println("Xin chào!".repeat(2)); // Xin chào!Xin chào!
    }
}

3. Cải Tiến Files API

Java 11 đã cải tiến API của lớp Files bằng cách thêm các phương thức tĩnh sau:

  • readString()
    Đọc nội dung của tệp văn bản và trả về dưới dạng chuỗi.

  • writeString()
    Ghi chuỗi vào tệp.

Ví dụ minh họa:

// src/main/java/FilesAPIEnhancementsTest.java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

public class FilesAPIEnhancementsTest {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("test.txt");
        
        // Sử dụng readString()
        System.out.println(Files.readString(path, StandardCharsets.UTF_8)); // Nội dung tệp test.txt
        
        // Sử dụng writeString()
        Files.writeString(path, "Xin chào, thế giới!", StandardCharsets.UTF_8);
    }
}

4. Cú Pháp Biến Địa Phương Trong Lambda

Từ Java 11, bạn có thể sử dụng từ khóa var để xác định kiểu của tham số trong biểu thức lambda.

Ví dụ minh họa:

// src/main/java/LocalVariableSyntax4LambdaParametersTest.java
import java.util.function.BiFunction;
import java.util.function.Function;

public class LocalVariableSyntax4LambdaParametersTest {
    public static void main(String[] args) {
        // Biểu thức lambda trước Java 11
        Function<String, String> toUpperCase = (String s) -> s.toUpperCase();
        
        // Biểu thức lambda với cú pháp var trong Java 11
        Function<String, String> toUpperCase2 = (var s) -> s.toUpperCase();
        
        // Kết hợp [888bets](https://www.kongken.com)  với chú thích
        BiFunction<Integer, Integer, Integer> sum = (@NonNull var a, @NonNull var b) -> a + b;
    }
}

5. Phương Thức toArray() Mới Trong Collection

Java 11 đã bổ sung phương thức toArray(IntFunction<T[]> generator) để chuyển đổi tập hợp thành mảng.

Ví dụ g88.vin minh họa:

// src/main/java/CollectionEnhancementsTest.java
import java.util.Arrays;
import java.util.List;

public class CollectionEnhancementsTest {
    public static void main(String[] args) {
        // Sử dụng phương thức toArray() mới
        String[] names = List.of("Larry", "Jacky", "Alice").toArray(String[]::new);
    }
}

6. Cải Tiến Lớp Optional

Java 11 đã thêm phương thức isEmpty() vào lớp Optional để kiểm tra xem giá trị bên trong có phải là null hay không.

Ví dụ minh họa:

// src/main/java/OptionalEnhancementsTest.java
import java.util.Optional;

public class OptionalEnhancementsTest {
    public static void main(String[] args) {
        Optional<String> optional = Optional.empty();
        if (optional.isEmpty()) {
            System.out.println("Optional trống");
        }
    }
}

7. Kiểm Soát Truy Cập Dựa Trên Nhúng

Java 11 đã cải tiến cách kiểm soát truy cập giữa các lớp nhúng, loại bỏ nhu cầu về các phương thức cầu nối do biên dịch viên tạo ra.

8. Epsilon: Bộ Thu Rác Không Hoạt Động

Java 11 đã giới thiệu bộ thu rác thử nghiệm Epsilon, không thực hiện thu gom rác thực tế.

9. ZGC: Bộ Thu Rác Độ Trễ Thấp

Java 11 cũng giới thiệu ZGC, một bộ thu rác độ trễ thấp dành riêng cho nền tảng Linux/x64.

10. Máy Ghi Cháy

Java 11 giới thiệu “Máy Ghi Cháy” để ghi lại và phân tích sự kiện khi ứng dụng chạy.

11. Phân Tích Đống Hiệu Quả Cao

Java 11 cung cấp khả năng phân tích đống với chi phí thấp hơn.

12. Chạy Chương Trình Từ File Nguồn Đơn Nhất

Java 11 cho phép chạy chương trình trực tiếp từ file nguồn duy nhất mà không cần biên dịch trước.

13. Hằng Số Động Trong Tập Tin Lớp

Java 11 giới thiệu cơ chế hằng số động để tăng tính linh hoạt và hiệu suất.

14. Hỗ Trợ TLS 1.3

Java 11 hỗ trợ giao thức TLS 1.3 để tăng cường bảo mật và hiệu suất.