首页 \ 问答 \ 在guava的AbstractService类中实现stop()(stop() implementation in guava's AbstractService class)

在guava的AbstractService类中实现stop()(stop() implementation in guava's AbstractService class)

我试图了解guava的AbstractService是如何实现的。 在接口Service中,已经提到了各种状态转换。 当stop()的调用成功时,一个这样的转换来自STOPPING - > TERMINATED。

现在,当我看到AbstractService的stop()如何实现时,我发现在STOPPING的情况下,它们会通过并且不会将状态更改为TERMINATED。

我可能错了,我只是想学习并理解它是如何工作的。

这里给出了AbstractService类的代码。 http://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/util/concurrent/AbstractService.java?r=8d5659ad0e137d3a594014793264292a75b48bb9

在页面上搜索stop()以查看其实现


I was trying to understand how guava's AbstractService has been implemented. In the interface Service the various state transitions have been mentioned. One such transition is from STOPPING -> TERMINATED when the call to stop() is successful.

Now when I am seeing how AbstractService's stop() has been implemented, I found that on case STOPPING, they fall through and don't change the state to TERMINATED.

I may be wrong, I am just trying to learn and understand how it works.

The code for AbstractService class is given here. http://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/util/concurrent/AbstractService.java?r=8d5659ad0e137d3a594014793264292a75b48bb9

Search for stop() on the page to see its implementation


原文:https://stackoverflow.com/questions/12657576
更新时间:2020-02-01 20:22

最满意答案

RUNNING状态下调用stop()时,状态将更改为STOPPINGdoStop()方法。 之后再次调用stop()不应该做任何事情。 doStop()实现应该调用notifyStopped() ,它将状态从STOPPING更改为TERMINATED


When you call stop() in the RUNNING state, the state is changed to STOPPING and the doStop() method gets called. Calling stop() again after that shouldn't do anything. The doStop() implementation should call notifyStopped() which changes the state from STOPPING to TERMINATED.

2012-09-30

相关问答

更多

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

使用Google Guava的Objects.ToStringHelper(Using Google Guava's Objects.ToStringHelper)

Guava的com.google.common.base.MoreObjects.toStringHelper()有一个小技巧。 在自动生成toString()方法时,我配置了IntelliJ IDEA来使用它。 我假设你可以在Eclipse中做同样的事情。 在Intellij中如何做到这一点 : 去上课 按Alt + Insert弹出“生成”菜单 选择toString() 点击“设置”按钮 转到“模板”选项卡 创建一个名为“Guava's MoreObjects.toStringHelper() ...

Guava的ImmutableSet成员资格方法是否模仿java.util.HashSet#contains?(Does Guava's ImmutableSet membership method mimic java.util.HashSet#contains?)

我在文档中看到的唯一确认如下: 这个类的工厂方法创建基于哈希的实例,... 换句话说,您可以期望查找使用类似于HashSet的散列机制(因此具有性能特征)。 文档是故意模糊的,因此可以进行各种改进(例如,对某些特殊情况使用特殊实现,如单例或空集)。 迭代顺序取决于创建方法。 在copyOf的情况下,它将是您传入的Iterable的迭代顺序(当然,在复制时)。 这有力地记录在案: 按顺序返回包含给定元素的不可变集合。 至于它是否遵循集合的包含方法,没有。 因为ImmutableSet创建一个副本 ( ...

Typescript抽象类没有实现没有错误(Typescript abstract class without implementation without errors)

您需要标记未实现为abstract字段和方法 abstract class AbstractService { abstract someMethod(): Observable<SomeType> } 这也将迫使实现类实际实现这些方法: // Error: Non-abstract class 'Service' does not implement inherited abstract member 'someMethod' from class 'AbstractService' ...

Guava ImmutableMap中的性能警告(Performance warning in Guava ImmutableMap)

我使用java Enum作为我的密钥,因此有一个有效的.equals和.hashCode默认实现,对吧? 无论是equals还是hashcode都被覆盖,所以它几乎不会更快(即等于返回this == other )。 我的第二个问题是“让你的元素类型缓存自己的散列码”甚至意味着什么! 你可能有类似下面的代码,以避免多次计算 - 如果你这样做,你需要确保: 哈希码是不变的(即不能在实例的整个生命周期中改变) 你的hashcode方法是线程安全的(这可以通过使用局部变量来完成,例如或者更简单地通过使得 ...

是否有可能将Guava的ForwardingListIterator和PeekingIterator结合起来?(Is it possible to combine Guava's ForwardingListIterator with a PeekingIterator?)

将一个新的“窥视”概念引入到一个已经很容易在两个方向上滚动的迭代器的价值在哪里? 如果你真的想要它,你可以实现两个简单的静态助手: public static <T> T peekNext(ListIterator<T> iterator) { T next = iterator.next(); iterator.previous(); return next; } public static <T> T peekPrevious(ListIterator<T> iterator) ...

将Guava的库添加到NetBeans(Adding Guava's library to NetBeans)

在Javadoc中提到的10.0中添加了Stopwatch :寻找@since / Since。 Stopwatch was added in 10.0, as mentionned in the Javadoc: look for the @since/Since.

在guava的AbstractService类中实现stop()(stop() implementation in guava's AbstractService class)

在RUNNING状态下调用stop()时,状态将更改为STOPPING并doStop()方法。 之后再次调用stop()不应该做任何事情。 doStop()实现应该调用notifyStopped() ,它将状态从STOPPING更改为TERMINATED 。 When you call stop() in the RUNNING state, the state is changed to STOPPING and the doStop() method gets called. Calling ...

如何在Eclipse中为Guava的ArrayListMultiMap类创建JUnit测试用例?(How to create JUnit test cases for Guava's ArrayListMultiMap class in Eclipse?)

虽然图书馆已经过Google的广泛测试,但如果您愿意,可以自己轻松完成。 在Eclipse中右键单击您的项目 选择属性 选择Java Build Path 单击添加库... 选择JUnit,选择JUnit4,确认 现在你基本完成了,你可以编写你的测试用例 - 只需用@Test注释注释任何public void someName()方法。 如果您的代码中没有public static main(String... args)方法,那么当您尝试运行该类时,Eclipse将使用JUnit自动运行它。 @ ...

Ceylon模块系统:Guava类不匹配,即使依赖树中只有一个Guava(Ceylon module system: Guava class mismatch even though there's only one Guava in dependencies tree)

好的,我明白了。 问题是RoleConverter转换为ceylon.language.String ,而api期望转换为java.lang.String 。 现在修复它: shared class RoleConverter() extends Converter<Role, JString>() { shared actual Role doBackward(JString? name) { "Cannot convert null to role." ...

相关文章

更多

最新问答

更多
  • 如何保护Solr只允许SELECT请求给用户并禁止其他任何东西?(How to secure Solr to allow SELECT request to only users and disallow anything else?)
  • XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
  • css3 3D变换不能平滑地制作动画(css3 3D transform doesn't animate smoothly)
  • 运行时错误'91'和Outlook.Application = <对象变量或没有设置块变量>?(Run-time error '91' & Outlook.Application = Object variable or With block variable not set?)
  • 慢的webservice问题(Slow webservice problem)
  • textview的不正确对齐方式(Improper alignment of a textview)
  • 在第一步“Hello World”中出现Java错误(Cannot run “Hello World” program in Eclipse)
  • 为什么十六进制地址是14个字符?(why the hex address is 14 character?)
  • 如何在Python中的不同类中使用变量?(How to use variable in different classes in Python?)
  • asp:GridView HYPERLINKFIELD - datanavigateurlformatstring中的asp代码(asp:GridView HYPERLINKFIELD - asp code inside datanavigateurlformatstring)
  • 关于adaboost算法(About adaboost algorithm)
  • 在Matlab上内置图像(Built in Images on Matlab)
  • java swing:输入键事件时焦点丢失(java swing: Focus lost on enter key event)
  • C#中的通用约束,T是相同的TSomethingElse,对吧?(Generic constraints in C#, T is the same TSomethingElse, right?)
  • 从mybatis中的光标获取数据(Fetching data from cursor in mybatis)
  • 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)
  • 在整个窗口中拉伸sf :: Sprite(Stretch sf::Sprite across entire window)
  • Selenium Node API Web驱动程序等待超时处理程序(Selenium Node API web driver wait timeout handler)
  • 函数使用并且是map的一部分(循环依赖?)(Function uses and is part of map (circular dependency?))
  • 是否可以在C ++ 14中使用可选模板参数创建类型元组?(Is possible to make a tuple of types with optional template parameters in C++14?)
  • PHP从窗帘后面打印/ f(PHP prints /f from behind the curtains)
  • JFrame的contentPane的LayoutManager(LayoutManager of JFrame's contentPane)
  • 用于Instagram Feed的图像滚动(Image Roll Overs for Instagram Feed)
  • 如何显示拉伸字体(双倍宽度/高度)?(How to display stretched font (double width/height)?)
  • 文件操作API在fileapi.h和stdio.h中的WP8差异?(WP8 differences between file manipulation APIs in fileapi.h and stdio.h?)
  • 保存失败后Rails没有回滚事务()(Rails not rolling back transaction after failed save())
  • jqgrid中的分页问题与数组数据(Pagination problem in jqgrid with array data)
  • 重定向时,通过其他页面上的URL调用javascript函数(Call javascript function through url on otherpage while Redirecting)
  • 如何使用InvokeCommandAction调用我的方法并传入参数?(How do I go about using InvokeCommandAction to call a method of mine and pass in parameters?)
  • Jquerymobile按钮仅显示页面的第一个外观(Jquerymobile buttons are shown only first apperance of the page)