2017-11-29 9 views
2

私はCompletableFutureブロックスレッドからget()メソッドを知っていますが、どのように達成することができますSystem.out.println("xD") FutureはCompletableFutureが完了した時点で実行されているので、Futureが処理中です。 コード:CompletableFutureブロックメインスレッド

import java.util.concurrent.*; 
import java.util.stream.Stream; 

public class CompletableFutureTest { 


    public static void main(String[] args) throws ExecutionException, InterruptedException { 
     CompletableFuture.supplyAsync(CompletableFutureTest::counting).whenComplete((result, exception) -> { 
      if (exception != null) { 
       System.out.println(result); 
      } else { 
      } 
     }).get(); 

     System.out.println("xD"); 
    } 


    public static int counting() { 

     Stream.iterate(1, integer -> integer +1).limit(5).forEach(System.out::println); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return 10; 
    } 
} 
+0

未来を変数に格納し、印刷して、_then_を呼び出して「Future#get」を呼び出します。結局のところ、あなたが未来を待っているならば、何かを並行して行うことはできません。また、メソッドが失敗した場合にのみ印刷します(おそらく 'if'と逆にする必要があります)。 – Rogue

+0

@Rogue未来を待つ必要がなければ何をすべきですか? – masterofdisaster

答えて

4

あなたは右のprint文の後get()を移動する必要があります。
このようにして、futureの値が評価されている間に印刷が実行されます。

関連する問題