• Java学习-076-多线程09:线程礼让 Thread.yield()


    线程的礼让可以通过 Thread.yield() 实现,可以控制优先级低的线程礼让,以便增加优先级高的线程获得优先执行的几率。

    具体示例代码如下所示:

    package com.fanfengping.demo;
    
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * 线程礼让:通过 Thread.Yield() 实现
     */
    @Slf4j
    public class Demo13RunnableYield implements Runnable {
        @Override
        public void run() {
            String threadName = Thread.currentThread().getName();
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
                if (i % 2 == 0 && "A".equals(threadName)) {
                    System.out.print(threadName + " 线程礼让,");
                    Thread.currentThread().yield();
                }
    
                if (i % 3 == 0 && "B".equals(threadName)) {
                    System.out.print(threadName + " 线程礼让,");
                    Thread.currentThread().yield();
                }
    
                if (i % 4 == 0 && "C".equals(threadName)) {
                    System.out.print(threadName + " 线程礼让,");
                    Thread.currentThread().yield();
                }
    
                System.out.println(threadName + " 执行," + i);
            }
        }
    
        public static void main(String[] args) {
            Demo13RunnableYield demo13RunnableYield = new Demo13RunnableYield();
    
            Thread threadYieldA = new Thread(demo13RunnableYield, "A");
            Thread threadYieldB = new Thread(demo13RunnableYield, "B");
            Thread threadYieldC = new Thread(demo13RunnableYield, "C");
    
            threadYieldC.setPriority(Thread.MAX_PRIORITY);
    
            threadYieldA.start();
            threadYieldB.start();
            threadYieldC.start();
        }
    }

    执行后,控制台输出如下所示:

    C 线程礼让,B 线程礼让,A 线程礼让,B 执行,0
    C 执行,0
    A 执行,0
    B 执行,1
    C 执行,1
    A 执行,1
    C 执行,2
    A 线程礼让,B 执行,2
    A 执行,2
    B 线程礼让,C 执行,3
    A 执行,3
    B 执行,3
    C 线程礼让,B 执行,4
    A 线程礼让,C 执行,4
    A 执行,4
    A 执行,5
    C 执行,5
    B 执行,5
    A 线程礼让,B 线程礼让,C 执行,6
    B 执行,6
    A 执行,6
    B 执行,7
    A 执行,7
    C 执行,7
    A 线程礼让,C 线程礼让,B 执行,8
    C 执行,8
    A 执行,8
    B 线程礼让,B 执行,9
    A 执行,9
    C 执行,9

    Process finished with exit code 0

    从程序的运行结果,可以看出:

    1、优先级高的线程获得优先执行的几率较大,但并非完全优先执行,取决于 CPU 的调度分配;

    2、线程礼让并非完全的礼让,礼让后仍可能优先执行;

    我本渺小,但山峰,我一次次绝顶!


    PS:若有错误,敬请告知,不胜感激!
    Copyright @范丰平 版权所有,如需转载请标明本文原始链接出处,严禁商业用途! 我的个人博客链接地址:http://www.cnblogs.com/fengpingfan
  • 相关阅读:
    机电传动控制第五周作业
    机电传动控制第四周作业
    机电传动控制 第三周作业
    机电传动控制第二周作业
    机电传动控制 第一周作业
    第一小组咖啡机器人最终结果
    第一组咖啡机器人界面设计1月6日进展
    第一组咖啡机器人界面设计一阶段进展
    实时软件控制第二次作业
    git的学习以及使用
  • 原文地址:https://www.cnblogs.com/fengpingfan/p/14704667.html
Copyright © 2020-2023  润新知