2017-04-05 1 views
0

나는 이런 일을하고 싶지 이 같은 말을runnableFuture 설정 결과

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

어떻게하면 자바로 구현할 수 있습니까?

+0

두 스레드 모두에서'Map'에 액세스하려고합니다. 그렇다면 처음부터 명확하게 언급해야합니다. 그렇지 않다면,'ExecutorService.submit'는'future.get()'을 막는 가장 쉬운 대답입니다 ;-) – Roland

답변

0

에 어떤 결과를두고 내가 제대로 이해하고 당신이 원하는 것은 다른 스레드까지 하나 개의 스레드에서 차단하는 경우. 난 당신이 여기에 예와 링크가 blocking queue example

0

당신은 이런 식으로 작업을 수행 할 수 있습니다에 대한 BlockingQueue의 좋은 솔루션입니다 생각 , 사용 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 중 하나 인 두 개의 생성자를 제공합니다. 그러나 이전에 표시된 것처럼이 줄 바꿈이 필요하지 않을 수도 있습니다.

관련 문제