Thread中yield方法

先上一段代码spa

public class YieldExcemple {

    public static void main(String[] args) {
        Thread threada = new ThreadA();
        Thread threadb = new ThreadB();
        // 设置优先级:MIN_PRIORITY最低优先级1;NORM_PRIORITY普通优先级5;MAX_PRIORITY最高优先级10
        threada.setPriority(Thread.MIN_PRIORITY);
        threadb.setPriority(Thread.MAX_PRIORITY);

        threada.start();
        threadb.start();
    }
}

class ThreadA extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("ThreadA--" + i);
            Thread.yield();
        }
    }
}

class ThreadB extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("ThreadB--" + i);
            Thread.yield();
        }
    }
}

 

本觉得运行结果以下:线程

ThreadB--0
ThreadA--0
ThreadB--1
ThreadA--1
ThreadB--2
ThreadA--2
ThreadB--3
ThreadA--3
ThreadB--4
ThreadA--4
ThreadB--5
ThreadA--5
ThreadB--6
ThreadA--6
ThreadB--7
ThreadA--7
ThreadB--8
ThreadA--8
ThreadB--9
ThreadA--9

结果却出现了多种状况,以下:code

ThreadB--0
ThreadB--1
ThreadB--2
ThreadB--3
ThreadB--4
ThreadB--5
ThreadB--6
ThreadB--7
ThreadB--8
ThreadB--9
ThreadA--0
ThreadA--1
ThreadA--2
ThreadA--3
ThreadA--4
ThreadA--5
ThreadA--6
ThreadA--7
ThreadA--8
ThreadA--9

或者blog

ThreadB--0
ThreadA--0
ThreadB--1
ThreadA--1
ThreadA--2
ThreadA--3
ThreadA--4
ThreadA--5
ThreadA--6
ThreadA--7
ThreadA--8
ThreadA--9
ThreadB--2
ThreadB--3
ThreadB--4
ThreadB--5
ThreadB--6
ThreadB--7
ThreadB--8
ThreadB--9

后翻阅资料得知:it

        Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法以后,它就会把本身CPU执行的时间让掉,io

让本身或者其它的线程运行,注意是让本身或者其余线程运行,并非单纯的让给其余线程。class

        yield()的做用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具备相同优先级的等待线程获取执行权;可是,并不能保thread

证在当前线程调用yield()以后,其它具备相同优先级的线程就必定能得到执行权;也有多是当前线程又进入到“运行状态”继续运行!yield

      举个例子:一帮朋友在排队上公交车,轮到Yield的时候,他忽然说:我不想先上去了,我们你们来竞赛上公交车。而后全部人就一块冲向公交车,方法

有多是其余人先上车了,也有多是Yield先上车了。

     可是线程是有优先级的,优先级越高的人,就必定能第一个上车吗?这是不必定的,优先级高的人仅仅只是第一个上车的几率大了一点而已,

最终第一个上车的,也有多是优先级最低的人。而且所谓的优先级执行,是在大量执行次数中才能体现出来的。

相关文章
相关标签/搜索