РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1007 of 1163 menu

Метод yield

Метод yield класса Thread является статическим методом и не принимает параметров. Он вызывается у текущего потока и служит подсказкой планировщику потоков о том, что поток готов уступить свое процессорное время другим потокам с таким же приоритетом. Важно понимать, что yield не гарантирует, что поток действительно уступит процессор - планировщик может проигнорировать эту подсказку и продолжить выполнение текущего потока. Метод не выбрасывает проверяемых исключений и не переводит поток в состояние ожидания, в отличие от методов sleep или wait.

Синтаксис

Thread.yield()

Пример

Давайте создадим два потока, каждый из которых выводит числа от 1 до 5, и после каждого вывода вызовем yield, чтобы дать возможность другому потоку выполниться:

public class Main { public static void main(String[] args) { Thread first = new Thread(() -> { for (int i = 1; i <= 5; i++) { System.out.println("first: " + i); Thread.yield(); } }); Thread second = new Thread(() -> { for (int i = 1; i <= 5; i++) { System.out.println("second: " + i); Thread.yield(); } }); first.start(); second.start(); } }

Возможный результат выполнения кода:

"first: 1" "second: 1" "first: 2" "second: 2" "first: 3" "second: 3" "first: 4" "second: 4" "first: 5" "second: 5"

Пример

Давайте проверим, что yield не гарантирует передачу процессора. Создадим поток, который вызывает yield в цикле, и посмотрим, продолжит ли он выполняться:

public class Main { public static void main(String[] args) throws InterruptedException { Thread worker = new Thread(() -> { for (int i = 1; i <= 3; i++) { System.out.println("worker: " + i); Thread.yield(); } }); worker.start(); worker.join(); System.out.println("done"); } }

Результат выполнения кода:

"worker: 1" "worker: 2" "worker: 3" "done"

Смотрите также

  • метод sleep,
    который приостанавливает поток на заданное время
  • метод join,
    который ожидает завершения потока
  • метод currentThread,
    который возвращает текущий поток
  • метод onSpinWait,
    который подсказывает процессору занятое ожидание
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить