使用fixedthreadpool java如何检查是否完成

时间:2014-01-07 15:16:42

标签: java multithreading

我在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完成​​后我无法杀死所有线程。但我不知道什么时候线程池完成下载所有文件。

1 个答案:

答案 0 :(得分:0)

  

我如何知道我的所有线程何时完成? xml解析器比下载速度快,因此在xml完成​​后我无法杀死所有线程。但我不知道线程池何时完成下载所有文件。

如果您帖子中的ThreadpoolExecutorService,则在将所有作业提交到池后,您应该在其上调用this.pool.shutdown();。然后,您可以致电this.pool.awaitTermination(...);等待任务完成。

如果您想要永远等待,请执行this.pool.awaitTermination(Long.MAX_LONG, TimeUnit.MILLISECONDS);

之类的操作