我在Java中使用FixedThreadPool来处理图像。问题是我有什么,首先我解析一个xml,用这个xml的信息我开始在池中的线程(用于下载的东西)。使用fixedthreadpool java如何检查是否完成
现在的问题是,我在每个<标签> xml中填充信息的ThreadPool。所以开始我不知道有多少次我将不得不将线程添加到池中。例如:
XML:
<object>
<download></download>
<download></download>
<download></download>
</object>
<object>
<download></download>
<download></download>
</object>
我创建的下载信息的ArrayList,而且比它传递给线程池。
线程池如下:
public void addAnhang(ArrayList<Anhang> a, String intern_id){
this.generateFolder(intern_id);
for(Anhang anh:a){
anh.setZielordner(props.getProperty("zielordner_anhang")+intern_id+File.separator);
this.tasks.add(Executors.callable(new AnhangWorker(anh)));
//this.pool.execute(new AnhangWorker(anh));
}
try {
this.pool.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end of this cycle");
}
所以现在我的问题。我如何知道我的所有线程何时完成? xml解析器比下载更快,所以我无法在xml完成后终止所有线程。但我不知道何时线程池完成下载所有文件。
确定,但其参数我需要在awaitTermination(这可能是因为线程池需要5个多分钟的XML解析器) –
我想是这样的: 而(this.poool.awaitTermination(10,TIMEUNIT .SECONDS)) System.out.println(“pool still running”); 但它也不关闭线程完成后.. –
这应该工作,但没有循环的一点,除非你需要在循环中做一些事情。 – Gray