2016-09-29 21 views
0

Javaでは、スレッド内で非同期メソッドを呼び出して処理する方法はありますか?Javaスレッド内で非同期メソッドを呼び出す方法は?

スレッド本体内のメソッドの1つが実行に時間がかかるシナリオを考えてみましょう。そのため、スレッドの完了に時間がかかります。

私はFutureTaskとExecutorsのような並行性パッケージクラスを使用していくつかの例を試しました。

非同期メソッド内ですべての例外を実装して処理することは可能ですか? JavaScriptでAJAX成功とエラーハンドラのような成功またはエラー応答を得ることは可能ですか?

非同期メソッドが正常に実行されたかどうか(親スレッドコンテキストの有無にかかわらず)を確実にする方法を教えてください。例で使用されるデフォルトの実行者を含めExecutor、の作成と温暖化は、ある程度の時間が必要であることを

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

public class AsyncExample { 
    String input; // common data 

    // async method 
    public String toLower() { 
     return input.toLowerCase(); 
    } 

    // method on main thread 
    public void run() { 
     input = "INPUT"; // set common data 
     try { 
      // start async method 
      CompletableFuture<String> future = CompletableFuture.supplyAsync(this::toLower); 
      // here we can work in parallel 
      String result = future.get(); // get the async result 
      System.out.println("input="+input+"; result="+result); 
     } catch (InterruptedException | ExecutionException e) { 
     } 
    } 

    public static void main(String[] args) { 
     new AsyncExample().run(); 
    } 
} 

注(50:非同期メソッドと親スレッド間通信の

+3

:空のメソッドを供給することにより。最も簡単な場合でもメインスレッドがあるので、メソッドを非同期に呼び出すことができれば、スレッドからそれらを呼び出すことができます。 'java.util.concurrent'パッケージは間違いなく開始するのに最適な場所です。 – Kayaman

+0

しかし、非同期メソッドの実行が成功するかどうかはどのように保証されますか?このシナリオの一例を挙げてください。 –

+1

同期メソッドと同じです。戻り値または例外。例外処理は、非同期性のために少し異なりますが、すべてドキュメントにあります。 – Kayaman

答えて

0

最も自然な方法は、標準クラスCompletableFutureです私のコンピュータではms)、あなたは事前に作成して暖かくしたいかもしれません。もちろん

 CompletableFuture.supplyAsync(()->null).get(); 
関連する問題