LongAdder扩展哪个类?

时间:2019-07-09 03:49:00

标签: java inheritance java-8

在引用JavaDocs for LongAdder的同时,它扩展了 Number 类。

Java docs LongAdder

然后,在查看源代码时,它是从 Striped64

LongAdder source code

这让我很困惑,为什么我们不能在javadocs中指定从Striped64类扩展的LongAdder ? 是因为 Striped64 扩展了 Number 吗?

2 个答案:

答案 0 :(得分:5)

  

LongAdder扩展哪个类?

如源代码中所示,它扩展了Striped64。由于该类不是公共API,因此Javadoc不会告诉您。


默认情况下,Javadoc仅为publicprotected成员生成文档;换句话说,仅记录了公共API 1 Striped64类是程序包专用的,因此未记录。由于未记录该类,因此找到了下一个最近记录的祖先,在这种情况下恰好是Number。请注意,您可能有一个记录的类Foo,它有15个以上的祖先,但是如果这些祖先都不是公共API,则Javadoc将显示Foo extends Object

从公共API与私有API的角度来看,LongAdder扩展了Striped64是无关紧要的。后一类是实施细节(即私有API)。定义库合同的是公共API。因此,在这种情况下,用户只关心LongAdderNumber的子类。

如果需要,可以配置Javadoc以记录所有内容,包括package-private和private成员。但是,生成的文档可能只能供私人使用(例如,在维护该库的组织内部)。


1。使API公开或私有的原因并不仅仅基于可见性修饰符。该类所在的包也很重要。例如,JDK在软件包中有许多类,它们的前缀为com.sunoraclejdk.internal等。这些软件包中的类是私有API,因此未在公开的Javadoc中进行记录。

随着模块的出现,“私有软件包”的想法在Java 9中获得了更多的官方地位。现在,您可以显式声明模块导出了哪些包,并且由运行时强制执行。

答案 1 :(得分:0)

他们可能正在扩展 Number LongAdder中的课程,谁知道?

  

来自Oracle Docs:

enter image description here

enter image description here

可以得出结论, LongAdder 通过扩展 AtomicLong来使用 Striped64

问:为什么LongAdder扩展了Striped64?

  

A:Striped64保留单元格的哈希表(其中每个单元格是   AtomicLong)。当使用多个线程将值添加到   LongAdder(扩展了Striped64),然后线程将其值相加   到该哈希表中的不同单元格。这导致并发线程   处理并增加了吞吐量。

可能是Striped64是内部实现,他们希望将其抽象化。