は、私はこのような何かをしたいですこのようなスムースはrunnableFuture結果セット
results.get(uuid).setResult("It is result from another thread")
どのようにしてJavaで実現できますか?
は、私はこのような何かをしたいですこのようなスムースはrunnableFuture結果セット
results.get(uuid).setResult("It is result from another thread")
どのようにしてJavaで実現できますか?
私はあなたが望むものを正しく理解していれば、別のスレッドは、いくつかの結果を置くまで、1つのスレッドでブロックされている。私はBlockingQueueのは、ここにあなたのために良い解決策は、あなたがこのようにそれを行うことができます例blocking queue example
とのリンクであると思います、使用してExecutorService
:
private ExecutorService executorService = Executors.newFixedThreadPool(4);
public Future<String> registerRequest(String uuid) {
RunnableFuture<String> runnableFuture = new FutureTask<String>(
Future<String> future = executorService.submit(() -> {
return "It is result from another thread";
});
// I left out the UUID part, please add yourself.
return future;
}
あなただけの、例えば、あなたのExecutorService
にsubmit
を呼び出し、罰金になりたいことがあり
ExecutorService yourExecutorService = /* e.g. */ Executors.newCachedThreadPool();
Future<String> future = yourExecutorService.submit(() -> "i am the answer created on another thread");
// the following line blocks, until the value is available:
System.out.println(future.get());
またExecutors
javadocに見て、そこにドキュメントをフォローしたいことがあります。
FutureTask
に関して:これは単なるラッパーであり、accepting a Callable
とRunnable
の2つのコンストラクタを提供します。しかし、前に示したようにこのラッピングは必要ないかもしれません。
私はほとんど両方のスレッドから 'Map'にアクセスしたいと思っていました。もしそうなら、最初からもっと明確に言及するべきです。そうでない場合、 'ExecutorService.submit'は' future.get() 'をブロックする最も簡単な答えです;-) – Roland