java - CompletableFuture 在 forloop 中被创建和等待
问题描述
我正在尝试遍历一堆文件并使用长时间运行的任务来处理它们。使用CompletableFuture.allOf(a, b)
我可以在日志中看到两个线程处理同一个文件,而不是每个线程一个。
private void fileScan() {
final Set<Video> videos = videoService.findAllVideoFiles();
for (Video video : videos) {
final CompletableFuture<Thumbnail> cover = thumbnailService.createCover(video);
final CompletableFuture<List<Thumbnail>> thumbnails = thumbnailService.createThumbnails(video);
CompletableFuture.allOf(cover, thumbnails);
try {
video.setCover(cover.get());
video.setThumbnails(thumbnails.get());
videoRepository.save(video);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
Set
由_Set<File> files = ConcurrentHashMap.newKeySet();
并且处理方法设置为@Async
但日志显示
START >> Thread thumbnail_thread_1 >> Video Dogs.mp4
START >> Thread thumbnail_thread_2 >> Video Dogs.mp4
END >> Thread thumbnail_thread_2 >> Video Dogs.mp4
END >> Thread thumbnail_thread_1 >> Video Dogs.mp4
START >> Thread thumbnail_thread_3 >> Video Cats.mp4
START >> Thread thumbnail_thread_4 >> Video Cats.mp4
END >> Thread thumbnail_thread_3 >> Video Cats.mp4
END >> Thread thumbnail_thread_4 >> Video Cats.mp4
有没有我错过的正确模式,或者我的日志不能被信任?
解决方案
推荐阅读
- javascript - 这是使用 Vue.JS onChange 函数的正确方法吗?
- python - 我应该使用哪种方法,同时保存如下所示的评论?
- sqlite - Flutter Sqlite 错误:未处理的异常:DatabaseException(没有这样的表:员工(代码 1 SQLITE_ERROR)
- python - 具有距离约束的 OR-tools CVRP 不起作用
- ruby-on-rails - 嵌套助手问题
- reactjs - 我想从一个数组中获取组件项目的名称,如屏幕截图所示
- automated-tests - 专门针对语言的 Azure GUIX 自动化测试
- android - Android - 从 5 月 5 日开始,您必须让我们知道您的应用为何需要广泛的存储访问权限。有什么快速的解决方案吗?
- java - 使用 MockWebServer 的测试类不需要运行器吗?
- kotlin - “when”语句中的不等式输出错误