yield表示当前线程申请交出执行权,但并不是一定会交出,依赖于系统的线程调度。
因此该方法并不稳定。
class Test { public static void main(String[] args) throws InterruptedException { TestYield t0 = new TestYield("thread0"); TestYield t1 = new TestYield("thread1"); t0.start(); t1.start(); } } class TestYield extends Thread { public TestYield(String name) { super(name); } @Override public void run() { for (int i = 0; i < 10; i++) { if (Thread.currentThread().getName().equals("thread0")&&i==5) { yield(); } System.out.println(Thread.currentThread().getName() + ":" + i); } } } /** 结果:t0打印4后会交出执行权,一般不会连续打印thread0:4 thread0:5 */
注意:yield 方法放弃执行权但并不释放锁。