Поток, вызвавший метод yield() продолжит свою работу как только планировщик снова передаст ему управление.
Thread.yield() может быть полезным, когда поток ожидает наступления какого-то события, и необходимо, чтобы проверка его наступления происходила как можно чаще.
class RandomGenerator extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
MyMainClass.marker = (int) (Math.random() * 100);
}
}
}
class EventWaiter extends Thread {
@Override
public void run() {
int local = 0;
while ((local = MyMainClass.marker) % 7 != 0) {
Thread.yield();
}
System.out.println("marker is " + local);
}
}
public class MyMainClass {
public static volatile int marker = 1;
public static void main(String[] args) {
Thread generator = new RandomGenerator();
Thread waiter = new EventWaiter();
generator.start();
waiter.start();
}
}
Возможные выводы:
/*
marker is 70
marker is 21
marker is 98
*/