один поток фактически выполняется в любой момент
Представьте себе, что это игра, в которой 10 человек пытаются сесть на 9 стульев по кругу (думаю, вы, наверное, знаете игру) - стульев не хватает на всех, но движется вся группа людей, всегда , Просто все сидят на стуле какое-то время (очень упрощенная версия среза времени ).
Таким образом, несколько процессов могут работать на одном ядре.
Но даже если у вас несколько процессоров, это не значит, что определенный поток будет работать на этом процессоре только в течение всего срока его службы. Для этого есть инструменты (даже в java), и они называются thread affinity , где вы можете прикрепить поток только к некоторому процессору (в некоторых ситуациях это очень удобно). Этот поток может быть перемещен (по расписанию ОС) для работы на другом ядре, при работе , это называется переключение контекста , а для некоторых приложений это переключение на другой ЦП иногда ун-хотел.
В то же время, конечно, несколько потоков могут работать параллельно на разных ядрах.