gpt4 book ai didi

java - shutdown() 之后需要 ExecutorService.awaitTermination()

转载 作者:行者123 更新时间:2023-12-01 09:05:10 24 4
gpt4 key购买 nike

根据 Javadocs,shutdown()将等待所有提交任务执行。我有两个问题:

  • 提交的任务是什么意思?任务是否必须通过 ExecutorService.submit() 方法专门提交,或者也包括通过 ExecutorService.execute() 方法提交的任务?
  • 我添加了一个调用 ExecutorService.shutdown() 的关闭 Hook 。根据文档,它应该等待所有提交任务执行。但直到我在 shutdown() 调用之后添加awaitTermination() 调用后,它才会出现。为什么在没有调用awaitTermination() 的情况下它不执行所有任务?

最佳答案

What does submitted task mean? Do the tasks have to be submitted specifically by ExecutorService.submit() method or it included tasks submitted by ExecutorService.execute() method also?

从这个意义上讲,“已提交”任务是传递给 ExecutorService 的任何 Runnable 或 Callable。尽管 javadoc 的措辞有点令人困惑,但它并没有区分 execute()submit()

I have added a shutdown hook which calls ExecutorService.shutdown(). As per the docs, it should wait for all submit tasks to be executed. But it doesn't until I add a awaitTermination() call after the shutdown() call. Why doesn't it execute all tasks without awaitTermination() call?

shutdown() 操作是非阻塞(异步)的,ExecutorService API 上的几乎所有方法也是如此。 javadoc 仅声明调用 shutdown()启动关闭序列。

这里的关键是 ExecutorService 将尝试等待所有任务完成,但是如果 shutdown() 是 main 方法终止之前的最后一行代码, System.exit() 将在 main 方法结束后调用,这将终止 JVM 并覆盖 ExecutorService 等待正在运行的任务完成的尝试。我认为 ExecutorService.shutdown() 总是延迟 System.exit() 是不可取的,并且更喜欢选择加入方法来阻止调用(即 awaitTermination)。

关于java - shutdown() 之后需要 ExecutorService.awaitTermination(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41340704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com