Метод yield в Java
Last updated: 6 мая 2025 г.Когда поток вызывает метод yield
он говорит: мне сейчас не обязательно заканчивать свою работу и занимать время процессора и больше времени передастся другим потокам
Пример программы:
1class YieldExample {
2 public static void main(String[] args) {
3 new SomeThread().start();
4 new SomeThread().start();
5 new SomeThread().start();
6 }
7}
8
9class SomeThread extends Thread {
10 public void run() {
11 System.out.println(Thread.currentThread().getName()
12 + " уступает свое место другим потокам");
13 Thread.yield();
14 System.out.println(Thread.currentThread().getName()
15 + " завершился");
16 }
17}
Вывод:

Мы запускаем три потока. Планировщик потоков может запустить эти потоки в разном порядке (например, 2-1-0 или 1-0-2)
Рассмотрим порядок 0-1-2.
Первым запускается 0 поток и с помощью yield он уступает время работы процессора другим потокам, то есть потоку 1 и потоку 2.
Вторым до yield доходит поток 1. Он уступает другим, то есть оставшемуся 2. Поток 2 доходит до yield последним и хочет уступить другим но уступать уже некому
Если больше нет потоков, которым можно уступить место для выполнения, то уступается место для выполнения последнему уступившему перед потоком 2 то есть потоку 1.
Далее последнему уступившему перед 1, то есть 0 и потом 2.
На консоли мы видим именно такую последовательность выполнения.
Следующие уроки
Semaphore в Java
10
мин.
ReentrantLock - гибкая альтернатива synchronized
11
мин.
Ожидание завершения потоков с помощью CountDownLatch
10
мин.