Java Thread yield()

In this guide, you will learn about the Thread yield() method in Java programming and how to use it with an example.

1. Thread yield() Method Overview

Definition:

The yield() method of the Thread class causes the currently executing thread object to temporarily pause and allow other threads to execute.

Syntax:

public static void yield()

Parameters:

- None.

Key Points:

- Thread.yield() is a static method of the Thread class.

- It's a hint to the thread scheduler that the current thread is willing to yield its current use of the CPU.

- The thread scheduler has full discretion on how to handle this hint, and the current thread might continue to run.

- It's generally used to improve the efficiency or fairness of an application by allowing other runnable threads to execute.

- The exact behavior of yield() is platform-dependent.

2. Thread yield() Method Example

public class ThreadYieldExample {
    public static void main(String[] args) {
        Thread producer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Producing value: " + i);
                // Hint to the scheduler that this thread is ready to yield the CPU
                Thread.yield();
            }
        });

        Thread consumer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Consuming value: " + i);
            }
        });

        producer.start();
        consumer.start();
    }
}

Output:

(Note: The output may vary on different runs and systems since the exact behavior of yield() is platform-dependent and non-deterministic.)

Producing value: 0
Producing value: 1
...
Consuming value: 0
Consuming value: 1
...

Explanation:

In the example, there are two threads: producer and consumer. The producer thread, after printing each value, gives a hint to the scheduler that it's willing to yield the CPU by calling Thread.yield()

The consumer thread just prints its values without any pause or yield. However, because the behavior of yield() is non-deterministic and platform-dependent, the exact interleaving of outputs from the producer and consumer threads may vary.

Comments