Количество логических процессоров определяет количество потоков, запущенных в данный момент.
Однако процессор может переключать потоки каждые 100 микросекунд или около 10000 раз в секунду, создавая иллюзию, что одновременно выполняется больше потоков.,Вызов sleep
может вызвать переключение контекста ЦП до истечения времени ожидания.
ПРИМЕЧАНИЕ. System.out.println удерживает блокировку для вывода, поэтому в действительности только один поток выполняет за разреальная работа, и даже тогда программа, вероятно, замедляется из-за скорости обновления вашего экрана.Попробуйте удалить println
(и sleep
), и он должен завершиться за долю времени.
Но как все 2000 потоков работали параллельно?
Почти все они спали.Вероятно, единственным занятым потоком был тот, который обновлял экран буферизованными println
сообщениями.