Многопоточность senior
Как java.util.Random становится thread-safe?
Ответ
java.util.Random формально thread-safe — это написано в Javadoc. Реализация потокобезопасности — через атомарный CAS на одном поле AtomicLong seed: метод next() в цикле читает старое значение и через compareAndSet атомарно записывает новое, повторяя попытку при конфликте. Это неблокирующий подход без synchronized.
Разбор: В java.util.Random поле seed — это AtomicLong, а метод next() в цикле читает старое значение и через compareAndSet атомарно записывает новое, повторяя попытку при конфликте; так достигается формально заявленная в Javadoc потокобезопасность без блокировок. Ловушка: используется неблокирующий CAS, а не synchronized; volatile сам по себе не защищает от гонки read-modify-write, а ThreadLocal-вариант — это уже отдельный класс ThreadLocalRandom.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.