• yiele函数


    1、概念:

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

    2、实战。

    看下面例子

      

    public class yieldDemo {
        public static void main(String[] args) {
            Runnable yield = new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i <= 10; i++) {
                        System.out.println(Thread.currentThread().getName() + i);
                        if (i == 5) {
                            Thread.yield();
                        }
                    }
                }
            };
            Thread t1 = new Thread(yield,"A");
            Thread t2 = new Thread(yield,"B");
            t1.start();
            t2.start();
        }
    }
    

      上面例子所示,两个线程,各循环10以内的数字,每当执行到5 时,就会给程序调度器一个暗示,表示可以让出线程。程序执行结果如下:

    A0
    A1
    A2
    A3
    A4
    A5
    B0
    B1
    B2
    B3
    B4
    B5
    A6
    A7
    A8
    A9
    A10
    B6
    B7
    B8
    B9
    B10
    
    Process finished with exit code 0
    

      可以多执行几次,可以看到每次执行结果,不一定是到5了让出资源,可能会一直执行下去,表示虽然给程序调度器暗示可以让出资源,但是资源调度器却忽略了这个暗示。

    总结:

    yield 和 sleep 的异同
    1)yield, sleep 都能暂停当前线程,sleep 可以指定具体休眠的时间,而 yield 则依赖 CPU 的时间片划分。

    2)yield, sleep 两个在暂停过程中,如已经持有锁,则都不会释放锁资源。

    3)yield 不能被中断,而 sleep 则可以接受中断。

    想要飞得更高,就该忘记地平线!
  • 相关阅读:
    第五章:Admin管理后台
    第五章:Admin管理后台
    第五章:Admin管理后台
    第五章:Admin管理后台
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
  • 原文地址:https://www.cnblogs.com/shenwen/p/11294897.html
Copyright © 2020-2023  润新知