Java

java 并发 yield()方法-线程让步

2020-05-09  本文已影响0人  静享时光

线程让步。Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

我们看看使用示例:

class MyThread8One extends Thread {
    private int countOne = 10;

    @Override
    public void run() {
        while (countOne-- > 0) {
            PrintUtils.print("MyThread8One   =================== count: " + countOne);
            Thread.yield();
        }
    }
}

class MyThread8Two extends Thread {
    private int countTwo = 10;

    @Override
    public void run() {
        while (countTwo-- > 0) {
            PrintUtils.print("MyThread8Two count: " + countTwo);
        }
    }
}


public class ThreadTest8 {

    public static void main(String[] args) {
        MyThread8One myThread8One = new MyThread8One();
        MyThread8Two myThread8Two = new MyThread8Two();
        myThread8One.start();
        myThread8Two.start();
    }

    /**
     *
     * MyThread8Two count: 9
     * MyThread8One   =================== count: 9
     * MyThread8Two count: 8
     * MyThread8One   =================== count: 8
     * MyThread8Two count: 7
     * MyThread8One   =================== count: 7
     * MyThread8One   =================== count: 6
     * MyThread8Two count: 6
     * MyThread8One   =================== count: 5
     * MyThread8One   =================== count: 4
     * MyThread8One   =================== count: 3
     * MyThread8Two count: 5
     * MyThread8One   =================== count: 2
     * MyThread8Two count: 4
     * MyThread8One   =================== count: 1
     * MyThread8Two count: 3
     * MyThread8One   =================== count: 0
     * MyThread8Two count: 2
     * MyThread8Two count: 1
     * MyThread8Two count: 0
     *
     * Process finished with exit code 0
     */
}

由结果可以看出来,虽然执行了Thread. yield()方法,但是Thread8One并没有让出执行权,让Thread8Two先执行。也就是我们前面说的,yield()方法并一定能是线程让步成功。因为让步的线程还有可能被线程调度程序再次选中而继续执行。

上一篇 下一篇

猜你喜欢

热点阅读