Я пытаюсь перебрать кучу файлов и обработать их с помощью долго выполняющихся задач.Используя 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
Isесть правильный шаблон, который я пропустил, или мои журналы просто нельзя доверять?