有两种方法可以使它并行运行:Streams和Executors.
使用流
您可以使用并行流,将其余部分留给jvm.在这种情况下,您无法控制何时发生的事情.另一方面,您的代码将易于阅读和维护:
sellerDataList.stream().forEach(sellerNames -> {
Stream stream = StreamSupport.stream(sellerNames.spliterator(), true); // true means use parallel stream
stream.forEach(sellerName -> {
getSellerAddress(sellerName);
});
});
使用ExecutorService
假设您需要5个线程,并且您希望能够等到任务完成.然后你可以使用一个带有5个线程的固定线程池并使用Future-s,这样你就可以等到它们完成了.
final ExecutorService executor = Executors.newFixedThreadPool(5); // it's just an arbitrary number
final List> futures = new ArrayList<>();
for (SellerNames sellerNames : sellerDataList) {
for (final String sellerName : sellerNames) {
Future> future = executor.submit(() -> {
getSellerAddress(sellerName);
});
futures.add(future);
}
}
try {
for (Future> future : futures) {
future.get(); // do anything you need, e.g. isDone(), ...
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}