При использовании многопоточного приложения yield
приведет к тому, что текущий исполняемый поток приостановит выполнение и будет установлен в состоянии ожидания. Затем JVM начнет запуск другого потока, который ранее находился в состоянии ожидания.
Я считаю, что тот же самый поток, который только что уступил, может быть спланирован, чтобы начать заново.
И мне еще предстоит увидеть это в дикой природе. Поэтому я думаю, что это безопасно.
Выработать:
В многопоточных нитей антуражей Запланированные и незапланированные выключить и по желанию JVM в. Таким образом, даже если доход не вызывается в коде, ваш поток может/будет автоматически уступать другим потокам, когда JVM решит, что это нужно. Это позволяет работать с несколькими потоками в среде с одним ядром обработки.
Вызывающий доход просто сообщает JVM о том, что текущий поток находится в состоянии ожидания, даже если JVM не подходит.
Постараюсь иллюстрацию:
Ниже приводится очень упрощенное представление исполнения 2 потоков с течением времени (предположим, 1 ядро) -
Thread\Time 1 2 3 4 5 6 7 8 9
Thread 1 ----------- ----- -------
Thread 2 ------- ---------- ------
Всякий раз, когда вы видите '-'
это означает, что поток является выполнения. A ' '
означает, что поток ожидает. Как вы можете видеть, только 1 поток может фактически запускаться одновременно. Итак, пока 1 работает, другой ждет. То, что нужно сделать, это дать другим потокам возможность бежать впереди текущего текущего потока.
Я надеваю Здесь нет вопроса. Что вы не понимаете в документации, которую вы цитировали? –
Я просто думаю, что потоки одного и того же приоритета не включают потоки с приоритетом выше одного, дают methof того, что было названо –
Исходный код говорит, что все это 'public static native void yield();': p –