zoukankan      html  css  js  c++  java
  • 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 则可以接受中断。

    想要飞得更高,就该忘记地平线!
  • 相关阅读:
    Java并发编程:线程池的使用
    多线程笔记
    《Java源码解析》之NIO的Selector机制(Part1:Selector.open())
    git reset --hard 和 git reset --sort区别
    java 泛型
    01springboot简介
    Selector 实现原理
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable
    activemq使用
    8年javascript总结
  • 原文地址:https://www.cnblogs.com/shenwen/p/11294897.html
Copyright © 2011-2022 走看看