Java Futureオブジェクトは、並列スレッド(Executors)によって実行される非同期計算の結果を取得するために使用されます。 Future.get()メソッドを呼び出し、結果が準備できるまで待ちます。この例は、Futureから結果を取得するための非ブロッキング方法を示しています。 java-implement-java-non-blocking-futures。Javaで非ブロッキング先物を実装する方法
NonBlockingExecutor executor = new NonBlockingExecutor(Executors.newSingleThreadExecutor());
NonBlockingFuture<Integer> future = executor.submitNonBlocking(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
String threadName = Thread.currentThread().getName();
System.out.println(threadName);
//print -> pool-1-thread-1
return 1;
}
});
future.setHandler(new FutureHandler<Integer>() {
@Override
public void onSuccess(Integer value) {
String threadName = Thread.currentThread().getName();
System.out.println(threadName);
//print -> pool-1-thread-1
}
@Override
public void onFailure(Throwable e) {
System.out.println(e.getMessage());
}
});
Thread.sleep(50000);
このonSuccess()メソッドは、パラレル実行が終了した後に呼び出されます。問題は、onSuccess()メソッドがメインスレッドで実行されていないことです。私はメインスレッドでonSuccess()メソッドを実行したい。どのように私はこれを修正することができます。ありがとう
おそらく、あなたのメインスレッドは何か他のことをしています。 –
正直なところ、私はエグゼクティブとそのことについてどうやって行くべきか分かりません。それ以外の場合はすべて失敗します。コレクションにデータを渡すだけで、メインスレッドはこのコレクションのデータを見て、適切に応答します。 – KookieMonster
Java 8 CompletableFutureを使用してこれを行うことはできますか? – Tharanga