2017-04-05 17 views
0

は、私はこのような何かをしたいですこのようなスムースはrunnableFuture結果セット

results.get(uuid).setResult("It is result from another thread") 

どのようにしてJavaで実現できますか?

+0

私はほとんど両方のスレッドから 'Map'にアクセスしたいと思っていました。もしそうなら、最初からもっと明確に言及するべきです。そうでない場合、 'ExecutorService.submit'は' future.get() 'をブロックする最も簡単な答えです;-) – Roland

答えて

0

私はあなたが望むものを正しく理解していれば、別のスレッドは、いくつかの結果を置くまで、1つのスレッドでブロックされている。私はBlockingQueueのは、ここにあなたのために良い解決策は、あなたがこのようにそれを行うことができます例blocking queue example

0

とのリンクであると思います、使用して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; 
} 
0

あなただけの、例えば、あなたのExecutorServicesubmitを呼び出し、罰金になりたいことがあり

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 CallableRunnableの2つのコンストラクタを提供します。しかし、前に示したようにこのラッピングは必要ないかもしれません。

関連する問題