Phương thức này được giới thiệu từ Java 9.
Ở đây, chúng ta có 2 phương thức overload delayedExecutor(), phương thức đầu tiên có cú pháp như sau:
1 |
static Executor delayedExecutor(long delay, TimeUnit unit) |
Phương thức này sẽ trả về một đối tượng Executor từ Executor mặc định mà đối tượng CompletableFuture sử dụng để thực thi tác vụ, sau khoảng thời gian delay. Và đối tượng Executor mới này sẽ làm nhiệm vụ thực thi tác vụ.
Phương thức thứ hai là:
1 |
static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor) |
Phương thức này cũng trả về một đối tượng Executor nhưng là từ đối tượng Executor mà chúng ta truyền vào trong phương thức này, sau khoảng thời gian delay. Và đối tượng Executor mới này cũng sẽ làm nhiệm vụ thực thi tác vụ.
Ví dụ mình muốn tính tổng của 2 số và vì một số điều kiện nào đó, mình muốn nó xảy ra sau 2s, code của mình sẽ như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.huongdanjava.javaexample; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Example { public static void main(String[] args) throws InterruptedException { int a = 2; int b = 5; CompletableFuture.supplyAsync(() -> a + b, CompletableFuture.delayedExecutor(2, TimeUnit.SECONDS)) .thenAccept(result -> System.out.println(result)); TimeUnit.SECONDS.sleep(10); } } |
Khi chạy ví dụ trên, các bạn sẽ thấy sau khoảng thời gian 2s thì kết quả mới xuất hiện:
Toàn TM
Hi anh, e có một thắc mắc là, a có thể nêu ra một số vd bài toán thực tế mà sd tới multi thread đc ko ạ
Thank anh!
Khanh Nguyen
Trong trường hợp em cần xử lý nhiều việc cùng một lúc thì sẽ cần đến multithread nha em. 🙂