Java Core trainee

Что делает i++?

Ответ

Read-modify-write: прочитать значение, добавить 1, записать обратно. Это ТРИ операции, и они НЕ атомарны. Поэтому в многопоточной среде два потока могут одновременно прочитать одно значение и оба прибавить — итог будет +1 вместо +2, часть инкрементов теряется. Для атомарности нужны AtomicInteger или synchronized.

Разбор: i++ — это последовательность read-modify-write из трёх неатомарных шагов, поэтому при конкурентном доступе двух потоков часть инкрементов теряется. Ловушки: байт-код iinc не даёт атомарности на уровне памяти, постфикс возвращает старое значение (в отличие от ++i), и компилятор не оборачивает операцию в synchronized — для атомарности нужны AtomicInteger или блокировки.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться