代码之家  ›  专栏  ›  技术社区  ›  Chris

在forloop中创建并等待的可完成的未来

  •  0
  • Chris  · 技术社区  · 7 年前

    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
    

    是否有一个正确的模式我错过了,或我的日志只是不可信?

    0 回复  |  直到 7 年前