Как я могу сравнить AtomicInteger
с заданным значением int
без установки AtomicInteger
на новое значение? Я не вижу такого метода в AtomicInteger
.сравнить AtomicInteger без его настройки
ответ
по времени получим() возвращает значение в AtomicInteger может получить обновление до нового значения ... так что я могу получить несвежий значение
По определению, если значение в атомное целое будет обновляться сразу после того, как вы вызовете int i = atomic.get()
, у вас будет устаревшее значение в i
. Но именно так работают параллельные программы - когда вы проконсультируетесь со значением, вы знаете, что он уже может быть изменен.
Гарантия AtomicInteger::get
заключается в том, что при его вызове вы получите самое последнее значение, доступное во время разговора. Гарантия, которой у вас не было бы с простым int
, например.
Другими словами, представьте себе программу ниже:
if (atomic.get() == 0) print("zero");
Даже если у вас была какая-то compareButNotSet
метод, это не помогло бы, потому что к тому времени, вы достигаете оператор печати значение атомной может измениться в любом случае ...
Если вам нужно убедиться, что печать вызывается только в том случае, если значение по-прежнему равно 0, вам необходимо синхронизировать (или использовать блокировку) весь блок.
Хм, значит, мне лучше синхронизировать все это? Я хочу сделать атомное сравнение, которое гарантирует, что значение не изменится, пока я сравниваю. Это все. –
@ peter.petrov см. Мое редактирование. – assylias
Хм, хорошо, хорошо ... Я немного разочарован :), поскольку я как-то ожидал чего-то еще ... но спасибо. –
get()
У вас есть способ это
Получает текущее значение.
Returns:
the current value
Вам не нужно беспокоиться о том, что синхронной части, так как вы сравните, что в определенный момент.
Ну, я понимаю, что вы имеете в виду, но ... Я думаю, это не так просто. Почему эти методы сравнения в AtomicInteger, если мы все должны использовать get()? –
Хм, хорошо, хорошо ... Я немного разочарован :), поскольку я как-то ожидал чего-то еще ... но спасибо. –
- 1. Как работает «Сравнить и устанавливать» в AtomicInteger
- 2. Как обеспечить атомарность без AtomicInteger в java?
- 3. Как использовать AtomicInteger?
- 4. Присвоение AtomicInteger
- 5. AtomicInteger атомный
- 6. Карта AtomicInteger
- 7. Свойства AtomicInteger
- 8. Расчет AtomicInteger в цикле
- 9. Почему AtomicInteger реализует Serializable
- 10. Являются ли примитивы синхронизации AtomicInteger?
- 11. Двухмерный массив AtomicInteger
- 12. Behavoir Threads с AtomicInteger
- 13. Когда AtomicInteger предпочитает синхронизировать?
- 14. AtomicIntegerArray vs AtomicInteger []
- 15. Совместимый с потоком AtomicInteger
- 16. Является ли AtomicInteger честным?
- 17. AtomicInteger incrementAndGet atomicity
- 18. AtomicInteger в многопоточной
- 19. Преобразование AtomicInteger в int
- 20. ThreadLocalRandom или AtomicInteger
- 21. AtomicInteger в threadDefaultFactory
- 22. AtomicInteger lazySet против набора
- 23. AtomicInteger или LongAccumulator
- 24. AtomicInteger: сохранить неотрицательный
- 25. QtGui.QMessageBox.information и настройки его
- 26. Есть ли простой способ сравнить строки соединения без его разбора?
- 27. Как сравнить значение MySQL int в запросе без его извлечения
- 28. Позиционирование слайдера изображения на экране без его автоматической настройки
- 29. Android listview adapter получить идентификатор элемента без его настройки
- 30. Сравнить типы без переопределения
Что случилось с 'get()'? – biziclop
@biziclop Ну, это то, что я сейчас использую, но я думал, что к моменту возвращения 'get()' значение в AtomicInteger может обновиться до нового значения ... так что я могу получить устаревшее значение? –
@ peter.petrov Это сравнение может быть синхронизировано? –