gpt4 book ai didi

java - 维护单个执行程序服务并适当关闭它

转载 作者:行者123 更新时间:2023-12-02 04:31:19 24 4
gpt4 key购买 nike

我的应用程序要求异步完成某项工作,因此我求助于执行器框架。如果某个外部接口(interface)关闭(供应商可以备份一段时间,例如 30 分钟),则预计会运行此作业(Runnable)。

考虑到这个问题,我相信我应该维护一个具有固定编号的预定执行器服务。当我上面所说的接口(interface)短暂关闭时执行这些作业的核心线程数(作为我需要线程池的类中的静态变量)。我也不认为我应该为处理此类作业的每个需要创建一个执行器(单个调度线程池执行器),并在作业运行后关闭,因为这会违背我的目的,不是吗?因为这可能意味着在备份时间内为每项作业保留一个线程,这对我来说听起来很可怕。

但是,如果我要维护这样一个执行程序服务,我什么时候要关闭执行程序?我知道执行程序一旦关闭就无法重复使用,而不关闭执行程序并保持线程 Activity 可以防止 JVM 关闭。我该怎么办?

我的最后一个声明是基于 Effective Java 第二版:

And here is how to tell the executor to terminate gracefully (if you fail to do this, it is likely that your VM will not exit):

executor.shutdown();

最佳答案

This job (a Runnable) is expected to be run should a certain external interface be down (the vendor could be backed up for a while, say, 30 mins).

以上是您的要求。现在解决方案完全取决于如何处理上述情况。

  • 触发器或事件监听器:如果你有一些触发器或事件监听器,当发现某个外部接口(interface)关闭时可以调用它,然后在触发的代码或事件中监听器,您可以创建一个 ExecutorService,执行所有任务(您可以选择固定或池化线程池),然后在完成所有任务后,您可以关闭 ExecutorService >
    在这种情况下,最好创建一个 ExecutorService,执行任务并关闭它。不需要长时间运行ExecutorService

  • 跟踪或定期检查:如果您必须定期跟踪或检查某些外部接口(interface)是否已关闭,那么我认为您可以拥有一个 ScheduledThreadPoolExecutor实现在固定时间间隔后检查某个外部接口(interface)是否已关闭,如果已关闭则执行所有任务。在这种情况下,您不会关闭 ExecutorService 并且它将始终运行。

P.S.:“触发”和“跟踪”是我自己的惯例,我将切线作为一个词使用,因此请用技术术语来推断它。

I understand that an executor once shut down can't be reused, while not shutting down the executor and keeping threads active could prevent the JVM from shutting down.

是的,执行器一旦关闭就无法重复使用。
不,正在运行的 ExecutorService 不会阻止 JVM 关闭,但是一旦 JVM 关闭,ExecutorService 实例及其线程池将被停止并销毁。

关于java - 维护单个执行程序服务并适当关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430002/

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