我在Java中使用FixedThreadPool来处理图像。我遇到的问题是,首先我解析一个xml,用这个xml的信息我在池中启动线程(用于下载东西)。
问题是现在,我在每个<之后填充ThreadPool的信息。标签>在xml中。所以一开始我不知道有多少次我必须向池中添加线程。例如:
的xml:
<object>
<download></download>
<download></download>
<download></download>
</object>
<object>
<download></download>
<download></download>
</object>
我正在使用下载信息创建一个ArrayList,然后将其传递给线程池。
Threadpool看起来像这样:
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完成后我无法杀死所有线程。但我不知道什么时候线程池完成下载所有文件。
答案 0 :(得分:0)
我如何知道我的所有线程何时完成? xml解析器比下载速度快,因此在xml完成后我无法杀死所有线程。但我不知道线程池何时完成下载所有文件。
如果您帖子中的Threadpool
为ExecutorService
,则在将所有作业提交到池后,您应该在其上调用this.pool.shutdown();
。然后,您可以致电this.pool.awaitTermination(...);
等待任务完成。
如果您想要永远等待,请执行this.pool.awaitTermination(Long.MAX_LONG, TimeUnit.MILLISECONDS);
。