Почему 2 потока работают медленнее чем 480 в Java?

Я хочу проверить как работает AtomicLong в Java и написал для этого небольшой код. Я ожидал что увеличение количества потоков больше количества ядер в процессоре должно наоборот замедлить код, однако результаты выполнения показывают противоположное. Общее время выполненияСреднее время выполнения каждым потоком своей части

OA - Один объект AtomicLong для всех потоков. XA - Для каждого потока свой объект AtomicLong. По оси X количество потоков. По оси Y количество миллисекунд до завершения работы всеми потоками в гистограмме "Total execution time" и среднее время работы потока в "Average execution time". Код запускался и через IntellijIDEA и через терминал (никакой разницы не заметил), OS Windows 10, CPU Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz

Вот лямбда Callable выполняемая каждым потоком.

private static final long TARGET_FOR_THREAD = TARGET / THREADS_COUNT;

() -> {
                        String threadName = Thread.currentThread().getName();
                        Result result = new Result(threadName);

                        for (int i = 0; i < QUANTITY_EXECUTIONS; i++) {

                            double dbl = doubles[counter];

                            long startTime = System.currentTimeMillis();

                            for (int j = 0; j < TARGET_FOR_THREAD; j++) {
                                atomicLong.incrementAndGet();
                                dbl += INCREASE_DOUBLE;
                            }

                            long invokeTime = System.currentTimeMillis() - startTime;

                            result.setOrAddInvokeTime(invokeTime);
                            result.setOrAddAtomicLongValue(atomicLong);
                            result.setOrAddDoubleValue(dbl);
                            result.setAtomicLongID(atomicLong);
                        }
                        soutThreadExecutionResult(result);
                        return result;
                    }

TARGET = 2_000_000_000


Ответы (0 шт):