【问题标题】:using fixedthreadpool java how to check if finished使用fixedthreadpool java如何检查是否完成
【发布时间】:2014-01-07 15:16:41
【问题描述】:

我在 Java 中使用 FixedThreadPool 来处理图像。我遇到的问题是,首先我正在解析一个 xml,使用这个 xml 的信息我正在启动池中的线程(用于下载东西)。

现在的问题是,我在 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 中我需要哪些参数(可能是线程池比 xml 解析器需要多 5 分钟)
  • 我尝试过这样的事情:while(!this.poool.awaitTermination(10, TimeUnit.SECONDS)) System.out.println("pool still running");但它也不会在线程完成后关闭..
  • 这应该可以,但循环没有意义,除非你需要在循环中做一些事情。
  • 哦...谢谢。哈哈失败。 while(!this.pool.awaitTermination(10, TimeUnit.Seconds)){ System.out.println("池仍在运行"); this.pool.shutdown();} 这修复了它:) 再次感谢
  • 我已将我的 cmets 移到一个答案中,因此您可以根据需要接受它。此外,您应该在将所有作业提交到线程池之后并在调用awaitTermination(...) 之前 调用pool.shutdown()。您应该循环调用shutdown()

标签: java multithreading


【解决方案1】:

我如何知道我的所有线程何时完成? xml 解析器比下载快,所以在 xml 完成后我不能杀死所有线程。但我不知道线程池何时完成下载所有文件。

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

如果您想永远等待,请执行this.pool.awaitTermination(Long.MAX_LONG, TimeUnit.MILLISECONDS); 之类的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多