yield()方法无法按预期工作

Nav*_*waj 0 java multithreading

public class YieldDemo extends Thread{

   public static void main(String[] args) {
        YieldDemo y1 = new YieldDemo();
        YieldDemo y2= new YieldDemo();

        y1.start();
        y2.start();
   }

   public void run() {
      for(int i=0;i<=5;i++) {
           if(i==3) {
               Thread.yield();
           } else
               System.out.println(i+Thread.currentThread().toString());
           }
   }
}
Run Code Online (Sandbox Code Playgroud)

根据yield()的文档,thread-1应该产生并允许thread-2在第3次循环之后进行处理.但是,输出并不像预期的那样.相同的线程继续跳过第3次迭代.在一个线程完成循环后,其他线程以相同的行为执行.请解释.

输出:

0Thread[Thread-1,5,main] 
1Thread[Thread-1,5,main] 
2Thread[Thread-1,5,main] 
4Thread[Thread-1,5,main] 
5Thread[Thread-1,5,main] 
0Thread[Thread-0,5,main] 
1Thread[Thread-0,5,main] 
2Thread[Thread-0,5,main] 
4Thread[Thread-0,5,main] 
5Thread[Thread-0,5,main] 
Run Code Online (Sandbox Code Playgroud)

Bat*_*tty 5

java.lang.Thread.yield()方法使当前正在执行的线程对象暂时暂停并允许其他线程执行.

注意:其他线程可以再次使用相同的线程.无法保证JVM选择哪个线程.