Метод yield в Java

Когда поток вызывает метод yield он говорит: мне сейчас не обязательно заканчивать свою работу и занимать время процессора и больше времени передастся другим потокам

Пример программы:

class YieldExample { public static void main(String[] args) { new SomeThread().start(); new SomeThread().start(); new SomeThread().start(); } } class SomeThread extends Thread { public void run() { System.out.println(Thread.currentThread().getName() + ” уступает свое место другим потокам”); Thread.yield(); System.out.println(Thread.currentThread().getName() + ” завершился”); } }

Вывод:

Мы запускаем три потока. Планировщик потоков может запустить эти потоки в разном порядке (например, 2-1-0 или 1-0-2)

Example

Рассмотрим порядок 0-1-2.

Первым запускается 0 поток и с помощью yield он уступает время работы процессора другим потокам, то есть потоку 1 и потоку 2.

Вторым до yield доходит поток 1. Он уступает другим, то есть оставшемуся 2. Поток 2 доходит до yield последним и хочет уступить другим но уступать уже некому

Если больше нет потоков, которым можно уступить место для выполнения, то уступается место для выполнения последнему уступившему перед потоком 2 то есть потоку 1.

Далее последнему уступившему перед 1, то есть 0 и потом 2.

На консоли мы видим именно такую последовательность выполнения.

Semaphore в Java

Semaphore в Java: контроль доступа потоков к ресурсам. Как ограничить число одновременных операций и управлять очередью. Рабочий пример с кодом.
Time to read: 10

ReentrantLock - гибкая альтернатива synchronized

ReentrantLock в Java: мощная альтернатива synchronized с гибкой блокировкой любых участков кода. Примеры, отличия и преимущества для многопоточности.
Time to read: 11

Ожидание завершения потоков с помощью CountDownLatch

CountDownLatch в Java: механизм ожидания завершения потоков. Как использовать await() и countDown() для синхронизации. Практический пример и разбор работы.
Time to read: 10