首页 > 其他 > 详细

06.yield

时间:2019-08-16 10:47:56      阅读:96      评论:0      收藏:0      [点我收藏+]
/**
 *  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
    }
}

06.yield

原文:https://www.cnblogs.com/fly-book/p/11361950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!