执行官服务没有执行每项工作?

时间:2017-09-13 12:13:19

标签: java multithreading java-stream future executorservice

我的代码中有一个for循环,执行1000次任务。我想减少它的执行时间,所以我试图通过执行器服务或流并行运行它。当我通过大约1000个聚合上的执行程序服务(或流)执行这些任务时,我只能执行大约950个作业。每个作业都会创建一个目录和一些文件。执行器服务实现如下所示。

ExecutorService executor = Executors.newFixedThreadPool(8); 
    List<Future<?>> futures = new ArrayList<>();
         for (String aggr : aggregates) {
              Future<?> future = executor.submit(() -> {  
                      //some generation task to be done for each aggregate
              });
         futures.add(future);
   }
   try {
        for (Future<?> fut : futures) {
            fut.get();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    executor.shutdown();

和Streams实现看起来像这样。

aggregates.parallelStream().parallel().forEach(aggr ->{
       //some generation task to be done for each aggregate
});

在这两种情况下,它都缺少大约50个工作岗位。 但是,当我像这样顺序运行时,它不会遗漏任何工作。

aggregates.parallelStream().sequential().forEach(aggr ->{
       //some generation task to be done for each aggregate
});

为什么要跳过一些工作?我怎样才能并行完成所有工作。我的系统有8个内核和i7处理器。

0 个答案:

没有答案