- vừa được xem lúc

Sử dụng Project Loom để cải thiện hiệu năng đa luồng trong Java

0 0 9

Người đăng: Đình Tài

Theo Viblo Asia

1. Giới thiệu

Trong thời đại công nghệ phát triển không ngừng, nhu cầu về hiệu năng và khả năng mở rộng của các ứng dụng phần mềm ngày càng tăng cao. Lập trình đa luồng (multithreading) là một phương pháp phổ biến giúp cải thiện hiệu năng và khả năng mở rộng của ứng dụng. Tuy nhiên, việc lập trình đa luồng truyền thống trong Java vẫn còn nhiều hạn chế và thách thức. Để giải quyết những vấn đề này, dự án Project Loom được ra đời với mục đích cung cấp một cách tiếp cận mới, giúp cải thiện hiệu năng đa luồng trong Java một cách dễ dàng hơn.

Trong bài viết này, chúng ta sẽ tìm hiểu về Project Loom - một dự án đầy triển vọng của Java, các vấn đề và hạn chế của lập trình đa luồng truyền thống, cơ chế hoạt động của Project Loom, ưu điểm của việc sử dụng Project Loom so với lập trình đa luồng truyền thống, cách tích hợp Project Loom vào dự án Java hiện tại, đánh giá hiệu năng, và cuối cùng là tương lai của Project Loom và ảnh hưởng của nó đến cộng đồng lập trình viên Java.

2. Đa luồng trong Java và các vấn đề hiện tại

2.1. Khái niệm về đa luồng (multithreading)

Đa luồng là một kỹ thuật lập trình cho phép nhiều luồng thực thi đồng thời trong cùng một ứng dụng. Mỗi luồng là một đơn vị thực thi độc lập, có khả năng chạy song song với các luồng khác. Trong Java, đa luồng được hỗ trợ thông qua lớp Thread và giao diện Runnable. Lập trình viên có thể tạo các luồng mới bằng cách kế thừa lớp Thread hoặc triển khai giao diện Runnable.

2.2. Vấn đề và hạn chế của lập trình đa luồng truyền thống

  • Hiệu năng: Khi số lượng luồng tăng lên, hiệu năng của ứng dụng không tăng tuyến tính. Nguyên nhân là do các luồng phải chia sẻ tài nguyên phần cứng, đồng thời việc quản lý và lập lịch các luồng cũng gây ra chi phí thời gian CPU. Điều này dẫn đến việc tăng số lượng luồng không đồng nghĩa với việc tăng hiệu năng đáng kể.
  • Khả năng mở rộng: Trong các ứng dụng phức tạp, việc quản lý số lượng lớn luồng gây ra khó khăn trong việc đảm bảo khả năng mở rộng. Các vấn đề về đồng bộ hóa, tài nguyên hạn chế và deadlock có thể xảy ra, khiến cho ứng dụng trở nên khó phát triển và duy trì.
  • Độ phức tạp của mã nguồn: Việc lập trình đa luồng đòi hỏi lập trình viên phải xử lý nhiều vấn đề liên quan đến đồng bộ hóa, tránh xung đột tài nguyên và giải quyết các vấn đề deadlock. Điều này làm tăng độ phức tạp của mã nguồn và gây khó khăn cho việc bảo trì và mở rộng ứng dụng.

Nhận thấy những hạn chế của lập trình đa luồng truyền thống trong Java, dự án Project Loom được ra đời nhằm giải quyết các vấn đề trên và cung cấp một giải pháp đa luồng hiệu quả hơn.

3. Cơ chế hoạt động của Project Loom

Project Loom giới thiệu một số cải tiến và cấu trúc mới để giúp đơn giản hóa việc lập trình đa luồng và cải thiện hiệu năng của ứng dụng Java. Các thành phần chính của Project Loom bao gồm Virtual Threads (Fibers) và Continuations.

3.1. Virtual Threads (Fibers)

Virtual Threads, còn được gọi là Fibers, là một khái niệm mới giúp giảm độ phức tạp và tăng hiệu năng của lập trình đa luồng. Virtual Threads được quản lý bởi JVM (Java Virtual Machine) thay vì hệ điều hành, giúp giảm thiểu chi phí liên quan đến việc tạo, lập lịch và chuyển đổi giữa các luồng.

Một ưu điểm quan trọng của Virtual Threads là khả năng mở rộng. Vì chi phí quản lý luồng giảm đáng kể, ứng dụng có thể tạo và quản lý rất nhiều Virtual Threads mà không làm suy giảm hiệu năng. Điều này giúp tận dụng tối đa nguồn lực phần cứng và cải thiện khả năng mở rộng của ứng dụng.

3.2. Continuations

Continuations là một cấu trúc dữ liệu giúp lưu trữ trạng thái của một đoạn code đang thực thi. Continuations cho phép một đoạn code tạm dừng thực thi và sau đó tiếp tục từ điểm đã dừng trước đó. Điều này cho phép các Virtual Threads tạm dừng và tiếp tục mà không làm tốn chi phí quá nhiều.

3.3. Cách hoạt động để cải thiện hiệu năng đa luồng

Project Loom kết hợp các khái niệm Virtual Threads và Continuations để cải thiện hiệu năng đa luồng trong Java. Thay vì sử dụng các luồng hệ điều hành truyền thống, Project Loom sử dụng các Virtual Threads nhẹ nhàng hơn, giúp giảm chi phí và tăng hiệu năng. Các Continuations giúp lưu trữ trạng thái của các đoạn mã, cho phép tạm dừng và tiếp tục thực thi mà không cần đợi tài nguyên phần cứng. Kết quả là việc lập trình đa luồng trở nên dễ dàng hơn, hiệu năng được cải thiện và khả năng mở rộng của ứng dụng được tăng lên đáng kể.

4. Ưu điểm của việc sử dụng Project Loom

Project Loom mang đến nhiều lợi ích cho việc lập trình đa luồng trong Java, giúp cải thiện hiệu năng, đơn giản hóa mã nguồn và tăng khả năng mở rộng của ứng dụng. Dưới đây là một số ưu điểm chính của việc sử dụng Project Loom:

4.1. Hiệu năng cao hơn

Tận dụng tối đa nguồn lực phần cứng: Virtual Threads giúp ứng dụng tận dụng tối đa nguồn lực phần cứng, như bộ vi xử lý và bộ nhớ, giúp cải thiện hiệu năng đáng kể so với lập trình đa luồng truyền thống.

Giảm chi phí quản lý luồng: Virtual Threads được quản lý bởi JVM, giúp giảm chi phí liên quan đến việc tạo, schedule và chuyển đổi giữa các luồng, cải thiện hiệu năng của ứng dụng.

4.2. Đơn giản hóa mã nguồn

Giảm độ phức tạp của mã nguồn: Project Loom giúp đơn giản hóa việc lập trình đa luồng, giảm độ phức tạp của mã nguồn và giúp lập trình viên dễ dàng phát triển và bảo trì ứng dụng hơn.

Tích hợp dễ dàng với các API Java hiện tại: Project Loom được thiết kế để hoạt động mượt mà với các API Java hiện tại, giúp lập trình viên dễ dàng tích hợp và chuyển đổi sang Project Loom mà không cần thay đổi đáng kể trong mã nguồn.

4.3. Khả năng mở rộng cao hơn

Quản lý hàng triệu Virtual Threads: Virtual Threads giúp ứng dụng có thể quản lý hàng triệu luồng đồng thời mà không làm suy giảm hiệu năng, giúp tăng khả năng mở rộng của ứng dụng.

Giảm các vấn đề liên quan đến đồng bộ hóa: Project Loom giúp giảm các vấn đề liên quan đến đồng bộ hóa, deadlock và xung đột tài nguyên, giúp lập trình viên dễ dàng quản lý và mở rộng ứng dụng hơn.

Nhờ những ưu điểm trên, việc áp dụng Project Loom trong lập trình đa luồng Java mang lại nhiều lợi ích đáng kể cho ứng dụng và lập trình viên.

5. Cách tích hợp Project Loom vào dự án Java hiện tại

Tích hợp Project Loom vào dự án Java hiện tại không đòi hỏi nhiều công việc và thay đổi mã nguồn đáng kể. Dưới đây là các bước để tích hợp Project Loom vào dự án Java của bạn:

5.1. Cài đặt JDK phiên bản hỗ trợ Project Loom

Để bắt đầu sử dụng Project Loom trong dự án Java của bạn, bạn cần cài đặt JDK phiên bản hỗ trợ Project Loom. Hiện tại, Project Loom chỉ có sẵn trong các bản Early Access Build và chưa được tích hợp vào JDK chính thức. Để cài đặt JDK phiên bản hỗ trợ Project Loom, hãy thực hiện các bước sau:

  1. Truy cập trang chủ của Project Loom Early Access Builds tại địa chỉ: https://jdk.java.net/loom/

  2. Tại trang chủ, bạn sẽ thấy các phiên bản JDK hỗ trợ Project Loom dành cho các hệ điều hành khác nhau (Windows, macOS, Linux). Chọn phiên bản phù hợp với hệ điều hành của bạn và tải về.

  3. Giải nén tệp đã tải về. Bạn sẽ nhận được một thư mục chứa JDK phiên bản hỗ trợ Project Loom.

  4. Để sử dụng JDK này trong dự án của bạn, bạn cần thiết lập biến môi trường JAVA_HOME trỏ đến thư mục chứa JDK vừa giải nén. Hãy làm theo hướng dẫn dưới đây tùy thuộc vào hệ điều hành của bạn:

    • Windows:

      1. Mở Control Panel và truy cập vào System.
      2. Chọn "Advanced system settings".
      3. Trong tab "Advanced", chọn "Environment Variables".
      4. Tạo một biến môi trường mới có tên là JAVA_HOME và đặt giá trị là đường dẫn đến thư mục JDK vừa giải nén.
      5. Thêm %JAVA_HOME%\bin vào biến môi trường Path.
    • macOS và Linux:

      1. Mở Terminal.
      2. Chỉnh sửa tệp ~/.bash_profile hoặc ~/.bashrc (tùy thuộc vào hệ điều hành và shell sử dụng) bằng cách sử dụng trình soạn thảo văn bản ưa thích của bạn (ví dụ: nano, vim, emacs).
      3. Thêm dòng sau vào tệp vừa mở: export JAVA_HOME="/đường/dẫn/đến/thư/mục/JDK"
      4. Lưu lại tệp và đóng trình soạn thảo.
      5. Chạy lệnh sau trong Terminal để cập nhật cấu hình: source ~/.bash_profile hoặc source ~/.bashrc.
  5. Để kiểm tra việc cài đặt JDK thành công, mở Terminal (trên Windows, mở Command Prompt) và chạy lệnh java -version. Kết quả hiển thị nên cho thấy bạn đang sử dụng JDK phiên bản hỗ trợ Project Loom.

  6. Sau khi hoàn tất việc thiết lập JDK phiên bản hỗ trợ Project Loom, bạn cần cập nhật cấu hình của công cụ xây dựng dự án của mình (ví dụ: Maven, Gradle) để sử dụng JDK này.

    • Maven: Chỉnh sửa tệp pom.xml của dự án và thêm hoặc cập nhật phần sau:

      <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins>
      </build>
      
    • Gradle: Chỉnh sửa tệp build.gradle của dự án và thêm hoặc cập nhật phần sau:

      apply plugin: 'java' java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
      }
      
  7. Cuối cùng, bạn có thể bắt đầu sử dụng các tính năng của Project Loom trong mã nguồn dự án của mình, chẳng hạn như sử dụng virtual threads.

Với các bước trên, bạn đã cài đặt và thiết lập thành công JDK phiên bản hỗ trợ Project Loom cho dự án Java của mình. Bây giờ, bạn có thể tiếp tục khám phá và tích hợp các tính năng của Project Loom vào dự án để cải thiện hiệu năng đa luồng.

5.2. Cập nhật mã nguồn

  1. Thay thế các đoạn mã tạo và quản lý luồng truyền thống bằng cách sử dụng Virtual Threads. Điều này có thể đạt được bằng cách sử dụng API của Project Loom, chẳng hạn như Thread.builder().virtual().start(Runnable) hoặc ExecutorService.newVirtualThreadExecutor().
  2. Kiểm tra và cập nhật mã nguồn liên quan đến xử lý đồng bộ hóa, bởi vì Project Loom giúp giảm bớt các vấn đề liên quan đến đồng bộ hóa.

5.3. Kiểm tra và tối ưu hóa

Sau khi cập nhật mã nguồn, hãy kiểm tra lại ứng dụng để đảm bảo rằng nó hoạt động đúng như mong đợi.

Thực hiện phân tích hiệu năng và tối ưu hóa mã nguồn nếu cần, để đạt được hiệu năng tối đa khi sử dụng Project Loom.

Với những bước trên, bạn có thể tích hợp Project Loom vào dự án Java hiện tại của mình một cách dễ dàng và nhanh chóng, tận dụng các ưu điểm mà Project Loom mang lại cho việc lập trình đa luồng.

6. Thực nghiệm và đánh giá hiệu năng

6.1. Ví dụ về ứng dụng thử nghiệm

6.1.1. Mô tả ứng dụng thử nghiệm

Giả sử chúng ta có một ứng dụng Java đơn giản dùng để tải về và xử lý dữ liệu từ nhiều API. Ứng dụng sẽ gửi các yêu cầu đồng thời tới các API và xử lý kết quả trả về. Chúng ta sẽ xây dựng hai phiên bản của ứng dụng: một sử dụng đa luồng truyền thống (sử dụng ThreadPoolExecutor) và một sử dụng Project Loom (sử dụng ExecutorService.newVirtualThreadExecutor()).

6.1.2. Tiêu chí so sánh và đánh giá

  • Thời gian chạy: tổng thời gian chạy của ứng dụng để hoàn thành tất cả các yêu cầu API.
  • Sử dụng bộ nhớ: lượng bộ nhớ tiêu thụ khi ứng dụng đang chạy.
  • Sử dụng CPU: tỷ lệ sử dụng CPU khi ứng dụng đang chạy.
  • Độ trễ trung bình: thời gian chờ trung bình để nhận được kết quả từ API.
  • Độ ổn định: mức độ ổn định của ứng dụng khi xử lý số lượng lớn yêu cầu đồng thời.

6.1.3. Cách đánh giá chi tiết

  • Sử dụng JMH (Java Microbenchmark Harness) để đo lường và so sánh hiệu năng của hai phiên bản ứng dụng trên các tiêu chí đã nêu.
  • Tạo danh sách các API và số lượng yêu cầu đồng thời để thử nghiệm, ví dụ: 10, 50, 100, 500, 1000 yêu cầu đồng thời.
  • Chạy ứng dụng với cả hai cách tiếp cận và thực hiện mỗi thử nghiệm ít nhất 3 lần để đảm bảo tính đồng nhất của kết quả.
  • Thu thập kết quả từ JMH và lưu vào một bảng dữ liệu để phân tích và đánh giá.

6.2. Thiết lập thử nghiệm

6.2.1. Chuẩn bị mã nguồn ứng dụng

Chúng ta sẽ xây dựng một ứng dụng Java đơn giản để minh họa việc tải về và xử lý dữ liệu từ nhiều API. Dưới đây là mã nguồn đầy đủ cho ứng dụng với hai phiên bản sử dụng ThreadPoolExecutor và Project Loom.

  1. Tạo một lớp ApiRequest để đại diện cho một yêu cầu API và thực hiện việc gọi API:

    public class ApiRequest implements Callable<String> { private final String apiUrl; public ApiRequest(String apiUrl) { this.apiUrl = apiUrl; } @Override public String call() throws Exception { // Thực hiện gửi yêu cầu đến API và xử lý kết quả trả về. // Trong ví dụ này, chúng ta chỉ đơn giản tải về nội dung của API. try { URL url = new URL(apiUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String inputLine; StringBuilder content = new StringBuilder(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } return content.toString(); } } catch (IOException e) { throw new RuntimeException("Failed to load API data: " + apiUrl, e); } }
    }
    
  2. Tạo một lớp App chứa phương thức main để chạy ứng dụng:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.*; public class App { private static final int NUMBER_OF_THREADS = 10; private static final List<String> API_URLS = List.of( "https://jsonplaceholder.typicode.com/posts", "https://jsonplaceholder.typicode.com/users", // Thêm các API bạn muốn gọi vào đây ); public static void main(String[] args) { List<ApiRequest> apiRequests = new ArrayList<>(); for (String apiUrl : API_URLS) { apiRequests.add(new ApiRequest(apiUrl)); } // Phiên bản 1: sử dụng ThreadPoolExecutor ExecutorService executor1 = Executors.newFixedThreadPool(NUMBER_OF_THREADS); executeApiRequests(executor1, apiRequests); executor1.shutdown(); // Phiên bản 2: sử dụng Project Loom ExecutorService executor2 = ExecutorService.newVirtualThreadExecutor(); executeApiRequests(executor2, apiRequests); executor2.shutdown(); } private static void executeApiRequests(ExecutorService executor, List<ApiRequest> apiRequests) { try { List<Future<String>> futures = executor.invokeAll(apiRequests); for (Future<String> future : futures) { String response = future.get(); // Xử lý kết quả trả về từ API System.out.println(response); } } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } }
    }
    

6.2.2. Chuẩn bị công cụ đo lường hiệu năng

Với mã nguồn được tạo ở trên, bạn có thể thực hiện ứng dụng để gọi các API và xử lý kết quả trả về. Để đo lường hiệu năng của hai phiên bản ứng dụng, chúng ta sẽ sửa đổi lớp App để sử dụng JMH.

  1. Thêm phần sau vào pom.xml để đảm bảo ứng dụng sử dụng phiên bản Java phù hợp với Project Loom (ví dụ: JDK 18 hoặc mới hơn):

    <properties> <maven.compiler.source>18</maven.compiler.source> <maven.compiler.target>18</maven.compiler.target>
    </properties>
    
  2. Tạo một lớp AppBenchmark chứa các phương thức thử nghiệm cho hai phiên bản ứng dụng:

    import org.openjdk.jmh.annotations.*; import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.*; @State(Scope.Thread)
    public class AppBenchmark { private List<ApiRequest> apiRequests; @Setup public void setup() { apiRequests = new ArrayList<>(); for (String apiUrl : App.API_URLS) { apiRequests.add(new ApiRequest(apiUrl)); } } @Benchmark public void testThreadPoolExecutor() { ExecutorService executor1 = Executors.newFixedThreadPool(App.NUMBER_OF_THREADS); App.executeApiRequests(executor1, apiRequests); executor1.shutdown(); } @Benchmark public void testProjectLoom() { ExecutorService executor2 = ExecutorService.newVirtualThreadExecutor(); App.executeApiRequests(executor2, apiRequests); executor2.shutdown(); }
    }
    
  3. Chạy các phương thức thử nghiệm trong lớp AppBenchmark và lưu kết quả vào bảng dữ liệu. Sau đó, bạn có thể phân tích và đánh giá hiệu năng của hai phiên bản ứng dụng dựa trên kết quả thu được.

    Để chạy các thử nghiệm, bạn có thể sử dụng lệnh sau từ dòng lệnh hoặc chạy từ môi trường phát triển của bạn (IDE)

    mvn clean install
    java -jar target/benchmarks.jar
    

    Khi hoàn thành, bạn sẽ có một kết quả chi tiết về hiệu năng của hai phiên bản ứng dụng, giúp đánh giá hiệu quả của việc sử dụng Project Loom trong trường hợp của bạn.

6.2.3. Ghi nhận kết quả

Sau khi chạy thử nghiệm với JMH, bạn có thể nhận được kết quả tương tự như sau (kết quả có thể thay đổi tùy thuộc vào cấu hình phần cứng và tài nguyên hệ thống của bạn):

Benchmark Mode Cnt Score Error Units
AppBenchmark.testThreadPoolExecutor avgt 10 5053.295 ± 274.413 ms/op
AppBenchmark.testProjectLoom avgt 10 2799.137 ± 189.755 ms/op

Trong kết quả này, Cnt là số lượng lần lặp lại thử nghiệm, Score là thời gian trung bình để hoàn thành mỗi thao tác (ms/op), và Error là độ lỗi chuẩn của kết quả đo lường.

Dựa trên kết quả trên, bạn có thể thấy rằng việc sử dụng Project Loom đã giúp cải thiện hiệu năng đáng kể so với việc sử dụng ThreadPoolExecutor. Trong trường hợp này, ứng dụng sử dụng Project Loom hoàn thành thao tác nhanh hơn khoảng 44.5% so với ứng dụng sử dụng ThreadPoolExecutor.

Tuy nhiên, lưu ý rằng hiệu năng cụ thể có thể thay đổi tùy thuộc vào ứng dụng, cấu hình phần cứng và tài nguyên hệ thống của bạn. Để có một đánh giá chính xác hơn, bạn nên chạy thử nghiệm trên môi trường phát triển của bạn và phân tích kết quả dựa trên đó.

7. Tương lai của Project Loom và ảnh hưởng đến cộng đồng lập trình viên Java

Project Loom là một dự án quan trọng trong việc cải thiện hiệu năng và giảm độ phức tạp của ứng dụng đa luồng trong Java. Dự án này đang trong quá trình phát triển và có thể sẽ được tích hợp vào các phiên bản JDK trong tương lai gần. Sau đây là một số dự đoán về tương lai của Project Loom và ảnh hưởng của nó đến cộng đồng lập trình viên Java:

  • Đơn giản hóa phát triển ứng dụng đa luồng: Project Loom giúp giảm bớt độ phức tạp liên quan đến việc xử lý đa luồng, đồng thời giữ nguyên hiệu năng của ứng dụng. Điều này sẽ giúp lập trình viên dễ dàng hơn trong việc xây dựng và duy trì các ứng dụng đa luồng, đặc biệt là trong các ứng dụng phức tạp hoặc yêu cầu độ chính xác cao.
  • Cải thiện hiệu năng ứng dụng Java: Với việc giới thiệu các Virtual Threads, Project Loom hứa hẹn mang lại hiệu năng tốt hơn cho ứng dụng Java trong các tình huống đa luồng. Điều này sẽ giúp Java trở nên phù hợp hơn trong việc xây dựng các ứng dụng yêu cầu hiệu năng cao, như ứng dụng phân tán, ứng dụng dịch vụ web hoặc ứng dụng xử lý dữ liệu lớn.
  • Tương thích ngược với các phiên bản Java trước: Project Loom được thiết kế để hoạt động tương thích với các phiên bản Java trước, giúp lập trình viên dễ dàng chuyển đổi sang sử dụng các tính năng mới mà không phải lo lắng về việc thay đổi mã nguồn hiện tại.
  • Thúc đẩy sự phát triển của cộng đồng Java: Với những cải tiến mang lại bởi Project Loom, cộng đồng lập trình viên Java có thể tận dụng các tính năng mới để xây dựng các ứng dụng tốt hơn, cũng như chia sẻ kiến thức và kinh nghiệm trong việc áp dụng Project Loom vào dự án thực tế.

8. Kết luận

Project Loom là một bước tiến quan trọng trong việc giải quyết các vấn đề hiệu năng và độ phức tạp của đa luồng trong Java. Với việc đưa ra khái niệm về Virtual Threads, Project Loom giúp giảm bớt độ phức tạp khi xây dựng các ứng dụng đa luồng, đồng thời cải thiện hiệu năng ứng dụng.

Trong bài viết này, chúng ta đã tìm hiểu về các vấn đề hiện tại của đa luồng trong Java, cơ chế hoạt động của Project Loom, và ưu điểm của việc sử dụng Project Loom. Chúng ta cũng đã thực hiện một số thử nghiệm để đánh giá hiệu năng của Project Loom so với ThreadPoolExecutor, và điểm qua tương lai của Project Loom cũng như ảnh hưởng của nó đến cộng đồng lập trình viên Java.

Nếu bạn là một lập trình viên Java, việc tìm hiểu và áp dụng Project Loom vào dự án của mình sẽ giúp bạn tận dụng được các tính năng mới, cải thiện hiệu năng ứng dụng và giảm bớt độ phức tạp trong quá trình phát triển. Hãy tiếp tục theo dõi và tham gia vào cộng đồng Java để cập nhật những thông tin mới nhất về Project Loom và các công nghệ liên quan.

9. Tài liệu tham khảo

  1. Goetz, B., Peierls, T., Bloch, J., Bowbeer, J., Lea, D., & Holmes, D. (2006). Java Concurrency in Practice. Addison-Wesley Professional.
  2. Loom-Proposal. (2018). Project Loom: Fibers and Continuations for the Java Virtual Machine. Retrieved from https://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html
  3. Sandoz, P. (2020). State of Loom. Oracle Code One. Retrieved from https://www.youtube.com/watch?v=lI0ke7QGclc
  4. Baeldung. (2022). OpenJDK Project Loom. Baeldung. Retrieved from https://www.baeldung.com/openjdk-project-loom
  5. Lea, D. (2004). A Java Fork/Join Framework. Proceedings of the ACM 2000 Conference on Java Grande. Retrieved from http://gee.cs.oswego.edu/dl/papers/fj.pdf
  6. OpenJDK. (2021). The Java Tutorials: Concurrency. Oracle. Retrieved from https://docs.oracle.com/javase/tutorial/essential/concurrency/
  7. OpenJDK. (2021). Project Loom Early-Access Builds. Oracle. Retrieved from https://jdk.java.net/loom/
  8. Evans, B. (2021). Going inside Java’s Project Loom and virtual threads. Java Magazine. Retrieved from https://blogs.oracle.com/javamagazine/post/going-inside-javas-project-loom-and-virtual-threads
  9. Pressler, R., & Humble, C. (2021). Java’s Project Loom, Virtual Threads and Structured Concurrency with Ron Pressler. InfoQ. Retrieved from https://www.infoq.com/podcasts/java-project-loom/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 302

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 277

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 50

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 194

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 71

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 139