Основная причина, по которой он «быстрее», - это заявленная производительность . Это важно, потому что:
При низком конфликте обновлений оба класса имеют схожие характеристики.
blockquote>Вы использовали LongAdder для очень частых обновлений, в который атомный CAS и собственные вызовы
Unsafe
будут вызывать конкуренцию . (См. источник и volatile читает ). Не говоря уже о промахах кеша / ложном совместном использовании на нескольких AtomicLongs (хотя я еще не смотрел макет класса, кажется, что до заполнения фактического поляlong
не было достаточного количества памяти.при высокой конкуренции ожидаемая пропускная способность этого класса значительно выше, за счет более высокого потребления пространства.
blockquote>Реализация расширяет
Striped64
, что является держатель данных для 64-битных значений. Значения хранятся в ячейках, которые дополняются (или чередуются), отсюда и имя. Каждая операция может на LongAdder изменять набор значений, присутствующих в Striped64. ячейка создается и изменяется, поэтому старый поток может заканчиваться одновременно с конкурирующим. Когда вам нужно конечное значение, суммы каждой ячейки просто складываются.К сожалению, производительность связана со стоимостью, который в этом случае является памятью (как это часто бывает). Striped64 может расти очень большой, если большая нагрузка потоков равна d).
Источник цитаты: Javadoc для LongAdder
Создайте файл с именем «gradle.properties» в этом каталоге:
C:\Users\[user]\.gradle
И поместите на него этот код:
org.gradle.daemon=true
это уменьшит время сборки градиента.
Я сам нашел проблему. Поскольку существует несколько модулей, и модули зависят друг от друга, один строковый ресурс был привязан к xml с использованием ObservableField из библиотеки привязки данных. Этот строковый ресурс присутствовал в этом модуле, который я изменил. Таким образом, другой модуль, зависящий от этого строкового ресурса, запускает kapt для этих модулей. Поэтому я удаляю все зависимости от всех других модулей. Теперь другие задачи не запускаются.
Но все же я обнаружил, что задача kapt не получает инкрементной вещи. Если что-то изменится, для этого модуля будет выполнена целая задача tiger.