Какой класс расширяет LongAdder? - PullRequest
3 голосов
/ 09 июля 2019

При ссылке на JavaDocs для LongAdder он расширяет класс Number .

Java docs LongAdder

Затем, глядя на исходный код, он расширяется от Striped64

LongAdder source code

Меня смущает, почему мы не можем указать в javadoc, что LongAdder расширяет класс Striped64 ?Это потому что Полосатый64 расширяется Число ?

Ответы [ 2 ]

5 голосов
/ 09 июля 2019

Какой класс расширяет LongAdder?

Как показано в источнике, он расширяется Striped64.Так как этот класс не является публичным API, Javadoc не сообщает вам этого.


Javadoc по умолчанию генерирует документацию только для public и protected членов;другими словами, только публичный API задокументирован 1 .Класс Striped64 является закрытым для пакета и поэтому не документирован.Поскольку класс не задокументирован, найден следующий ближайший задокументированный предок, который в данном случае равен Number.Обратите внимание, что у вас может быть документированный класс Foo, имеющий 15+ предков, но если ни один из этих предков не является публичным API, Javadoc покажет Foo extends Object.

С точки зрения открытого API по сравнению с частным API,факт LongAdder распространяется Striped64 не имеет значения.Последний класс представляет собой подробность реализации (т.е. частный API).Это публичный API, который определяет контракты библиотеки;следовательно, пользователь заботится только о том, чтобы LongAdder был подклассом Number в этом случае.

Вы можете сконфигурировать Javadoc для документирования всего, включая закрытый пакет и private членов, если это необходимо.Однако сгенерированная документация, вероятно, должна быть предназначена только для частного использования (например, для организации, обслуживающей библиотеку).


1.То, что делает API общедоступным или приватным, основано не только на модификаторе видимости.В какой упаковке находится класс, также важно.Например, JDK имеет много классов в пакетах с префиксами, такими как com.sun, oracle, jdk.internal и так далее.Классы в этих пакетах являются частным API и поэтому не документированы в общедоступном Javadoc.

Идея «частных пакетов» получила более официальный статус в Java 9 с появлением модулей,Теперь вы можете явно объявить, какие пакеты экспортируются модулем, и это принудительно выполняется во время выполнения.

0 голосов
/ 09 июля 2019

Они могут расширяться Number класс в LongAdder, кто знает?

Из документов Oracle:

enter image description here

enter image description here

Можно сделать вывод, что LongAdder использует AtomicLong , расширяя Striped64.

В: Почему Striped64 расширяется с помощью LongAdder?

A: Striped64 содержит хэш-таблицу ячеек (где каждая ячейка является вариантом AtomicLong).Когда несколько потоков используются для добавления значений к LongAdder (что расширяет Striped64), тогда потоки добавляют свои значения в разные ячейки в этой хэш-таблице.Это приводит к одновременной обработке потока и увеличивает пропускную способность.

Возможно, Striped64 - скорее внутренняя реализация, и они хотели, чтобы она была абстрагирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...