gpt4 book ai didi

java - 使用 Guava 的可重启服务

转载 作者:太空狗 更新时间:2023-10-29 22:35:45 24 4
gpt4 key购买 nike

我目前正在开发一个应用程序,我需要在其中管理多个服务的状态,并根据某些事件停止/启动它们。问题是,正如文档中所述,Guava 的服务是单向的,这意味着一旦停止,就无法再次启动。

由于我需要以某种方式规避这个问题,我面临着几个备选方案,我想提出来供考虑(特别是因为每个备选方案都可能存在我现在不知道的缺点).

这个问题的第一个明显的解决方案是在我需要“重新启动”它时实例化一个新服务。这行得通,但在我当前的体系结构中,它会使事情变得有点复杂:目前我正在实例化所有服务,并基于来自 EventBus 的事件,在需要时启动或停止它们。调用启动和停止方法的类仅保存对服务映射的引用,并根据收到的事件在这些实例上调用正确的方法。如果我需要实例化一个新对象来响应一个事件,我将不得不放弃我目前拥有的一些解耦(可能通过保留每种类型服务的类并使用反射调用构造函数)。

另一种可能性是将服务接口(interface)实现为 RestartableThreadedService(或类似的东西)。如果我采用这条路线,我的 start() 方法可以创建另一个线程,就好像它是第一次一样,并重置状态。

第二种方法有什么明显的缺点吗?我担心我可能在这里遗漏了一些明显的缺点(除了必须编写更复杂的代码之外),尤其是在线程管理方面。

最佳答案

我会推荐您的第一种方法,但有比反射(reflection)更好的方法。使用依赖注入(inject),或者可能传递 Supplier<Service>对象而不是使用 serviceClass.newInstance() , 可能是去这里的路。

关于java - 使用 Guava 的可重启服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976367/

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