何時在 Java 9 中使用 CompletableFuture 的 delayedExecutor() 方法?


delayedExecutor()方法已新增到了 Java 9 中的CompletableFuture類。CompletableFuture定義了delayedExecutor()的兩個過載方法:第一個方法從預設Executor物件返回一個 Executor 物件,該CompletableFuture物件在延遲後使用該物件執行任務,並且new Executor物件可以執行任務,而第二個方法也返回一個 Executor 物件,但這是一個Executor物件,我們在延遲後將該物件傳遞到此方法中,並且new Executor物件也可以執行任務。

語法

public static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor)
public static Executor delayedExecutor(long delay, TimeUnit unit)

示例

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class DelayedExecutorMethodTest {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      CompletableFuture<String> future = new CompletableFuture<>();
      future.completeAsync(() -> {
         try {
            System.out.println("inside future: processing data...");
            return "tutorialspoint.com";
         } catch(Throwable e) {
            return "not detected";
         }
      }, CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS))
                          .thenAccept(result -> System.out.println("accept: " + result));
      for(int i = 1; i <= 5; i++) {
         try {
            Thread.sleep(1000);
         } catch(InterruptedException e) {
            e.printStackTrace();
         }
         System.out.println("running outside... " + i + " s");
      }
   }
}

輸出

running outside... 1 s
running outside... 2 s
inside future: processing data...
accept: tutorialspoint.com
running outside... 3 s
running outside... 4 s
running outside... 5 s

更新於: 09-03-2020

3K+ 瀏覽

職業夠用

完成課程然後獲取認證

開始
廣告
© . All rights reserved.