2016-09-04 2 views
0

3 가지 Java 메서드를 실행하려고합니다. 그리고 모두 다른 형식의 데이터를 반환합니다 (클래스 형식이라고 함). ExecutorService을 사용하여이 3 가지 방법을 병렬로 실행할 수있는 방법이 있습니까? 이런 식으로 call() 메서드는 그것을 사용하는 것에 대한 나의 생각을 망칠 수있는 특정한 것을 반환해야합니다.Java : 다른 형식의 데이터를 반환하는 비동기 메서드 호출

달성 방법이 있는지 알려주십시오.

+4

당신은 당신이 당신의 질문에 지금까지 시도 코드를 표시해야합니다. [ask]를 읽고 [mcve]를 제공하십시오 – Tibrogargan

+0

반환 값에 공통점이 없으면'Object'를 반환 할 수 있습니다. 어쨌든 결과를받는 코드가 무엇을 가지고 있는지 알아 내야합니다. – rghome

답변

0

일반적으로 call() 메서드는 특정 내용을 반환하므로 유용합니다. Callables의 3 가지 유형을 만들 수 있으며 아무런 문제가 없습니다.

Callable<A> c1 =() -> { return getA(); }; 
Callable<B> c2 =() -> { return getB(); }; 
Callable<C> c3 =() -> { return getC(); }; 

Future<A> f1 = executor.submit(c1); 
Future<B> f2 = executor.submit(c2); 
Future<C> f3 = executor.submit(c3); 
0

실행자는 임의 유형을 반환하도록 설계된 일반 기능 인터페이스 인 호출 가능 태스크를 허용합니다.

ExecutorService executorService = Executors.newCachedThreadPool(); 
    executorService.submit(() -> "Hello"); 
    executorService.submit(() -> new BigDecimal("1.1")); 
    executorService.submit(() -> new ArrayList()); 

제출()는 사용자의 호출 가능에 의해 반환 된 데이터와 동일한 제네릭 형식이됩니다 미래, 계산 결과에 대한 일반적인 홀더를 반환합니다.

Future<String> future = executorService.submit(() -> "Hello"); 

이 결과에 액세스하려면) (얻을 전화 :

String result = future.get();