Является ли LongAdder неправильным выбором для генератора идентификаторов? - PullRequest
0 голосов
/ 07 июня 2018

Java LongAdder более производительный, чем AtomicLong.Однако, если я получаю это правильно, это не лучший выбор для генератора идентификаторов, потому что нет атомарной операции «чтения и увеличения».

Я спрашиваю это, потому что я вижу, что люди рекомендуют этодля генерации идентификатора, и я не вижу смысла, поскольку sum() будет вызываться для каждой операции.

Является ли LongAdder хорошим или плохим выбором для простого генератора длинных идентификаторов?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Во-первых, LongAdder в Java более производительный, чем AtomicLong , который не очень корректен .Это имеет место, если по этому поводу существует большая конкуренция - иначе это то же самое, что и AtomicLong внутри.Но даже в этом случае - вы должны знать, что он использует некоторое дополнительное пространство для того, чтобы каждый поток вычислял результат отдельно, поэтому, когда вызывается sum, он просто собирает эти результаты.

Но определенно не очень хороший выбор дляГенератор ID, в любом случае.

0 голосов
/ 07 июня 2018

Я думаю, что вы уже ответили на свой вопрос.Это определенно избыточно для генерации идентификатора из одного потока и не может использоваться в многопоточном сценарии, потому что нет атомарной incrementAndGet подобной операции.Таким образом, ответ должен быть не лучшим выбором.

Как говорит javadoc, этот класс полезен для таких вещей, как сбор статистики и таких, где конкуренция потенциально высока:

Этот классобычно предпочтительнее, чем AtomicLong, когда несколько потоков обновляют общую сумму, которая используется для таких целей, как сбор статистики, а не для детального управления синхронизацией.

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