Java Core trainee
Что делает i++?
Ответ
Read-modify-write: прочитать значение, добавить 1, записать обратно. Это ТРИ операции, и они НЕ атомарны. Поэтому в многопоточной среде два потока могут одновременно прочитать одно значение и оба прибавить — итог будет +1 вместо +2, часть инкрементов теряется. Для атомарности нужны AtomicInteger или synchronized.
Разбор: i++ — это последовательность read-modify-write из трёх неатомарных шагов, поэтому при конкурентном доступе двух потоков часть инкрементов теряется. Ловушки: байт-код iinc не даёт атомарности на уровне памяти, постфикс возвращает старое значение (в отличие от ++i), и компилятор не оборачивает операцию в synchronized — для атомарности нужны AtomicInteger или блокировки.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.