나는 이런 일을하고 싶지 이 같은 말을runnableFuture 설정 결과
results.get(uuid).setResult("It is result from another thread")
어떻게하면 자바로 구현할 수 있습니까?
나는 이런 일을하고 싶지 이 같은 말을runnableFuture 설정 결과
results.get(uuid).setResult("It is result from another thread")
어떻게하면 자바로 구현할 수 있습니까?
에 어떤 결과를두고 내가 제대로 이해하고 당신이 원하는 것은 다른 스레드까지 하나 개의 스레드에서 차단하는 경우. 난 당신이 여기에 예와 링크가 blocking queue example
당신은 이런 식으로 작업을 수행 할 수 있습니다에 대한 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;
}
그냥, 예를 들어, 당신의 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
중 하나 인 두 개의 생성자를 제공합니다. 그러나 이전에 표시된 것처럼이 줄 바꿈이 필요하지 않을 수도 있습니다.
두 스레드 모두에서'Map'에 액세스하려고합니다. 그렇다면 처음부터 명확하게 언급해야합니다. 그렇지 않다면,'ExecutorService.submit'는'future.get()'을 막는 가장 쉬운 대답입니다 ;-) – Roland