Java Core senior
Почему shared Random может быть медленнее sequential?
Ответ
В sequential один поток последовательно дёргает nextDouble — CAS всегда успешен, никаких retry. В parallel 7 потоков одновременно пытаются обновить seed через CAS: только один успевает, остальные 6 крутят retry в цикле, и это contention сводит на нет весь выигрыш от параллелизма.
Разбор: java.util.Random обновляет seed через CAS в цикле: при конкуренции только один поток из семи успевает, остальные крутят retry, и contention сводит на нет параллелизм. Ловушка: методы Random.next() не synchronized (там как раз lock-free CAS на AtomicLong), false sharing не главная причина, а дубликатов чисел не возникает — проигрыш именно в повторяющихся неуспешных CAS.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.