work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

yield函数

Posted on 2019-12-29 16:26  work hard work smart  阅读(549)  评论(0编辑  收藏  举报

yield函数概念:

当调用Thread.yield() 函数时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示。

public class YieldDemo {

    public static void main(String[] args) {
        Runnable yieldTask = new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i <= 10; i++){
                    System.out.println(Thread.currentThread().getName()  + i) ;
                    if(i == 5){
                        Thread.yield();
                    }
                }
            }
        };

        Thread t1= new Thread(yieldTask,"A");
        Thread t2 = new Thread(yieldTask,"B");
        t1.start();
        t2.start();
    }
}

  打印结果:

A1
A2
A3
A4
A5
A6
A7
A8
A9
B1
A10
B2
B3
B4
B5
B6
B7
B8
B9
B10

  可以发现A5后面是A6,并没有让出CPU

 

再执行一次

A1
B1
A2
A3
A4
A5
B2
A6
A7
A8
A9
A10
B3
B4
B5
B6
B7
B8
B9
B10

  可以发现A5后面是B2,交出了CPU执行