ExecutorService用来做并行作业不起作用

时间:2016-04-08 14:20:59

标签: java multithreading executorservice

我正在将ExecutorService用于一个简单的多线程应用程序,它只包含两个线程,但这两个线程都做了大量工作。 (复制文件,mvn打包大模块)

我的目的是平行地完成这两个任务,但这两个线程都是一起开始的,我观察到一个线程启动,做一些工作,然后再等待直到另一个完成。我不明白为什么会这样。希望有人回答。 :)

我的代码示例:

ExecutorService executorService = Executors.newFixedThreadPool(2);

  Set<Future<Void>> futureSet = new HashSet<Future<Void>>();

  public IX3InstallerThreadPool(List<Callable<Void>> threadList) throws MojoExecutionException
  {
    for (Callable<Void> thread : threadList)
    {
      futureSet.add(executorService.submit(thread));
    }

    execute();
  }

  private void execute() throws MojoExecutionException
  {
    boolean flag = false;
    for (Future<Void> future : futureSet)
    {
      try
      {
        future.get();
      }
      catch (InterruptedException e)
      {
        System.out.println("Interrupted");
      }
      catch (ExecutionException e)
      {
        System.out.println("Exception thrown from the thread");
        for (Future<Void> future1 : futureSet)
        {
          future1.cancel(true);
        }
        break;
      }
    }
  }

0 个答案:

没有答案