1.contentList应该用Collections.synchronizedList(contentList)
修饰
2.另外线程外部应该等待多线程执行完,再读取contentList 可以考虑用countdownlatch类
pool_executor是用的哪个实现类
submit之后是会返回一个Future对象的,调用它的get方法就可以获得返回值,我们项目就是这样用的
jdk8版本,可以使用CompletableFuture.supplyAsync。
伪代码:
List<T> completableFutures = new ArrayList<>();
/**
* 多线程查询
*/
for () {
CompletableFuture<T> t = CompletableFuture.supplyAsync(() -> {
return tt;
}).exceptionally(e->{
e.printStackTrace();
return null;
});
completableFutures.add(t);
}
CompletableFuture[] completableFutures1 = new CompletableFuture[completableFutures.size()];
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(completableFutures.toArray(completableFutures1));
voidCompletableFuture.join();
completableFutures.stream().forEach(s->{
try {
result.add(s.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
});