CompletableFuture создается и ждет внутри внутри цикла - PullRequest
0 голосов
/ 24 ноября 2018

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

...