ブロックしている特定の API を使用する Java プロジェクトに取り組んでいます。
結果を待っている間にブロックする必要がないように、非同期プログラミングとコールバックを使用したいと思います。JavaFuture
の使用を検討しましたが、それを使用できると思う唯一の方法は、get()
ブロックするメソッドを呼び出すことです。私は、非同期プログラミングを行うために他の方法を使用することにもオープンです。
私の現在のコードは次のようになります。
Object res = blockingAPI();
sendToClient(res);
を使うFuture
としたら、このようにします。しかし、私の理解はget()
ブロッキングです。
private final int THREADS = Runtime.getRuntime().availableProcessors();
private ExecutorService executor = Executors.newFixedThreadPool(THREADS);
public void invokeApi() {
Future<Object> future = executor.submit(new Callable<Object>() {
public Object call() {
return result;
}
});
Object result = future.get(5, TimeUnit.SECONDS)
}
get()
結果が利用可能になったときに自動的に呼び出されるコールバックによって関数が基本的に処理されるように、これを実装するにはどうすればよいでしょうか?