java多线程-Thread的yield方法

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 方法放弃执行权但并不释放锁

猜你喜欢

转载自www.cnblogs.com/liuboyuan/p/10120228.html