【发布时间】:2019-07-03 07:57:50
【问题描述】:
例如,如果您在 JavaFX 中有一个启动任务的 ExecutorServic(ES),该任务又包含另一个 ES 并启动新任务。 - 当第一个 ES 关闭时,第二个 ES 的线程会发生什么。我认为它们不会被关闭(如果我理解正确的话,如果只关闭主线程,它们就不会被关闭)。
【问题讨论】:
标签: java executorservice shutdown java-threads
例如,如果您在 JavaFX 中有一个启动任务的 ExecutorServic(ES),该任务又包含另一个 ES 并启动新任务。 - 当第一个 ES 关闭时,第二个 ES 的线程会发生什么。我认为它们不会被关闭(如果我理解正确的话,如果只关闭主线程,它们就不会被关闭)。
【问题讨论】:
标签: java executorservice shutdown java-threads
当您建立由线程池支持的执行器服务时,关闭该服务及其线程池至关重要。如果您的应用程序退出,您的任务和池可能会像僵尸一样继续前进。确保应用程序生命周期中的挂钩(启动、退出等)被正确地用于启动和停止执行程序及其线程池。
此外,您可以重用执行程序服务及其线程池,而不是产生一个新的。有时有一个单独的池是有意义的,但你应该非常清楚你这样做的动机。
当你建立两个或多个执行器服务时,它们和它们的后备线程池是分开的。 关闭一个对另一个没有影响。
顺便说一句,在某些情况下,将一个任务安排在计划的执行器服务计划中,再安排另一个任务是明智的。但这也可能是一种“代码味道”,是关于糟糕设计的线索。您没有提供足够的细节来判断这里是哪种情况,但我建议您考虑一下并搜索许多其他现有的关于 executors 的帖子。
【讨论】: