Всякий раз, когда поток вызывает метод Thread.yield()
, он дает подсказку планировщику потока, что он готов приостановить выполнение.Планировщик потока может игнорировать эту подсказку.
Если какой-либо поток выполняет метод yield, планировщик потока проверяет, существует ли какой-либо выполняемый (ожидающий выполнения) поток с таким же или высоким приоритетом, чем у этого потока.Если процессор обнаружит какой-либо поток с более высоким или одинаковым приоритетом, он переключится на новый поток.Если нет, текущий поток продолжает выполняться.
Поскольку в вашем примере у вас достаточно процессоров для обслуживания всех потоков (они работают, не ожидая в состоянии выполнения);Thread.yield()
ничего не сделает, и ваши потоки продолжат свое выполнение.
Примечание о Windows от Microsoft DOTNet:
Этот метод эквивалентениспользование вызова платформы для вызова собственной функции Win32 SwitchToThread .
Выход уступает процессору, выполняющему вызывающий поток.Операционная система не будет переключать выполнение на другой процессор, даже если этот процессор простаивает или использует поток с более низким приоритетом.Если на текущем процессоре нет других потоков, готовых к выполнению, операционная система не приводит к выполнению
, поэтому в некоторых ситуациях могут возникать ошибки.