2014-01-07 25 views
0

我在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完成​​后终止所有线程。但我不知道何时线程池完成下载所有文件。

+0

确定,但其参数我需要在awaitTermination(这可能是因为线程池需要5个多分钟的XML解析器) –

+0

我想是这样的: 而(this.poool.awaitTermination(10,TIMEUNIT .SECONDS)) System.out.println(“pool still running”); 但它也不关闭线程完成后.. –

+0

这应该工作,但没有循环的一点,除非你需要在循环中做一些事情。 – Gray

回答

0

如何知道我的所有线程何时完成? xml解析器比下载更快,所以我无法在xml完成​​后终止所有线程。但我不知道何时线程池完成下载所有文件。

如果您的文章ThreadpoolExecutorService,那么你应该调用它this.pool.shutdown();您所提交的所有作业池后。然后你可以拨打this.pool.awaitTermination(...);等待任务完成。

如果你想永远等待,那么做点像this.pool.awaitTermination(Long.MAX_LONG, TimeUnit.MILLISECONDS);

相关问题