Я использую FixedThreadPool в Java для обработки изображений. Проблема в том, что у меня есть, что в первую очередь я разбираю xml, с информацией об этом xml. Я запускаю потоки в пуле (для загрузки материала).using fixedthreadpool java как проверить, закончен ли
Проблема в том, что я заполняю ThreadPool информацией после каждого тега <> в xml. Поэтому для начала я не знаю, сколько раз мне придется добавлять потоки в пул. например:
XML:
<object>
<download></download>
<download></download>
<download></download>
</object>
<object>
<download></download>
<download></download>
</object>
Я создаю ArrayList с информацией загрузки, и чем передать его ThreadPool.
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. Но я не знаю, когда threadpool выполняется с загрузкой всех файлов.
хорошо, но какие параметры мне нужно в awaitTermination (это может быть, что ThreadPool нужно 5 минут больше, что XML-парсер) –
я пытался что-то вроде этого: времени (this.poool.awaitTermination (10, TimeUnit .SECONDS)) System.out.println («пул все еще работает»); Но он также не закрывается после того, как потоки закончены. –
Это должно работать, но не нужно зацикливать, если вам не нужно что-то делать в цикле. – Gray