java - ExecutorService InvokeAll 用于混合数据类型
问题描述
我是新手,尝试使用 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。请帮助我进行必要的更改。
解决方案
推荐阅读
- amazon-web-services - 无法通过 HTTP 连接到 EC2
- reactjs - 无法在 onclick 事件处理程序中传递参数 - React
- sql-server - Azure 上的 .NET Core 无法连接到 SQL Server 数据库
- html - CSS:如何使 div 背景宽度适合
- php - 根据用户定义的索引顺序对数组进行排序
- json - 如何将数据保存回原始 json 文件?
- node.js - 无法读取未定义 nodejs 的属性“forEach”
- set - 如何找到集合中的元素个数?CPLEX OPL
- r - 如何测量R中的家庭范围栅格图层和多边形之间的重叠
- typescript - 如何使用“路径元组”从嵌套属性中检索类型