Затраты на использование 500 потоков на машине, которые, как я полагаю, не имеют 500 ядер, используют задачи, которые занимают примерно 100-1000x, пока поиск по карте для выполнения кода, который может обнаружить JVM, не делаетвсе, что может привести к случайному результату.;)
Другая проблема, с которой вы можете столкнуться, заключается в том, что тест, который быстрее выполняется с одним потоком, может выиграть от использования синхронизированного, поскольку он смещает доступ к одному потоку.то есть он превращает ваш многопоточный тест обратно в однопоточный, который является самым быстрым в первую очередь.
Вы должны сравнить время, которое вы получаете с одним потоком, выполняющим цикл.Если это быстрее (что, я думаю, так и будет), то это бесполезный многопоточный тест.
Я предполагаю, что вы запускаете синхронизированный код после несинхронизированного кода.т.е. после того как JVM немного прогрелась.Поменяйте местами порядок выполнения этих тестов и запустите их много раз, и вы получите разные результаты.