我是新手,尝试使用ExecutorService调用具有不同返回类型的多个线程。在继续之前,我需要等待所有线程完成。我可以使用同质返回类型来做到这一点,但想要使用异构返回类型。
下面是我的示例代码片段:
@RestController
public class ApplicationController {
@GetMapping
public String HelloWorld() {
System.out.println("Inside Thread main");
Callable<String> callabletask = () -> {
return invokeThread1();
};
Callable<String> callabletask2 = () -> {
return invokeThread2();
};
List<Callable<String>> tasks = new ArrayList<>();
System.out.println("Inside Thread main - 1 ");
StringBuilder result = new StringBuilder();
ExecutorService executor = Executors.newFixedThreadPool(10);
System.out.println("Inside Thread main - 2");
tasks.add(callabletask);
tasks.add(callabletask2);
try {
List<Future<String>> futures = executor.invokeAll(tasks);
for (Future<String> f : futures) {
result.append(f.get());
System.out.println(" result ::: " + result);
}
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Inside Thread main - 5 " + result.toString());
return result.toString();
}
private String invokeThread1() {
final String uri = "http://localhost:8082";
return invokeService(uri).getBody();
}
private String invokeThread2() {
final String uri = "http://localhost:8083";
return invokeService(uri).getBody();
}
private ResponseEntity<String> invokeService(final String uri) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setaccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>("parameters",headers);
ResponseEntity<String> result = restTemplate.exchange(uri,HttpMethod.GET,entity,String.class);
return result;
}
}
想象一下, invokeThread1的返回类型为String ,而 invokeThread2的返回类型为Integer 。请帮助我进行必要的更改。