zoukankan      html  css  js  c++  java
  • 06.yield

    Thread.yield()方法的作用:暂停当前正在执行的线程,并执行其他线程。(可能没有效果) yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。 结论:大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

    /**
     *  sleep 与 yield 方法的区别在于,当线程调用 sleep 方法时调用线程会被阻塞挂起指定的时间,
     *  在这期间线程调度器不会去调度该线程。 而调用 yield 方法时,线程只是让出自己剩余的时间片,
     *  并没有被阻塞挂起,而是处于就绪状态,线程调度器下一次调度时就有可能调度到当前线程执行
     */
    public class YieldDemo implements Runnable{
        YieldDemo(){
            Thread t = new Thread(this);
            t.start();
        }
        @Override
        public void run() {
            for (int i = 0; i < 5; i++) {
                //当 i=O时让出CPU执行权,放弃时间片,进行下一轮调度
                if (i%5==0){
                    System.out.println(Thread.currentThread()+" yield cpu...");
                    //当前线程让出CPU执行权,放弃时间片,进行下一轮调度
    //                Thread.yield();
                }
            }
            System.out.println(Thread.currentThread()+" is over");
        }
        public static void main(String[] args){
            new YieldDemo();
            new YieldDemo();
            new YieldDemo();
            //执行多次输出结果样式
            //Thread[Thread-0,5,main] yield cpu...
            //Thread[Thread-1,5,main] yield cpu...
            //Thread[Thread-2,5,main] yield cpu...
            //Thread[Thread-0,5,main] is over
            //Thread[Thread-1,5,main] is over
            //Thread[Thread-2,5,main] is over
            //输出了第一行后当前线程让出了 CPU 执行权
    
            //注释Thread.yield();
            //执行多次输出结果存在同一线程的两行输出在一起
            //Thread[Thread-0,5,main] yield cpu...
            //Thread[Thread-0,5,main] is over
            //Thread[Thread-1,5,main] yield cpu...
            //Thread[Thread-1,5,main] is over
            //Thread[Thread-2,5,main] yield cpu...
            //Thread[Thread-2,5,main] is over
        }
    }
    
  • 相关阅读:
    WordPress后台添加侧边栏菜单
    Redis 使用多个数据库及密码配置
    datatable 修改点击列头进行排序顺序
    命令行客户端操作pg数据库常用操作
    pg 创建自增id
    让 PHP COOKIE 立即生效(不用刷新就可以使用)
    js cookie
    使用mysql监视器即命令行下的mysql
    javascript 获取键盘上的按键代码KeyCode
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
  • 原文地址:https://www.cnblogs.com/fly-book/p/11361950.html
Copyright © 2011-2022 走看看