我正在将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;
}
}
}