• 9.让线程放弃执行权



    让线程放弃执行权

     导言

    如何让正在执行任务的线程放弃执行权,我们可以使用 thread类里面的yield的方法,该方法是一个静态方法,直接使用thread类名调用,它的作用是使当前线程放弃执行权。

    演示

    下面来演示该方法,演示该方法需要用到两个任务,分别是赋值任务和打印任务。

    赋值、任务的内容是定一个value属性,然后给value赋值,打印任务的内容是当value被赋值以后,打印value的值。

    我们先来编写右边的赋值任务,定义一个静态属性value,初始值为0。


    为了让放弃执行权效果更加明显,在给
    value赋值之前,我们让线程休眠三秒钟,最后我们给value赋值100,至此赋值任务编写完成。

    再来看看左边的打印任务,在打印任务中直接输出value的值,不过这样还没等到给value赋值,就直接输出了value的值。所以我们需要在value被赋值以前放弃执行权,使用while循环,判断value的值是否等于0。当y轴的值等于0时,直接使用thread类名调用yield的方法。 使当前现场放弃执行权,至此打印任务也编写完成。

    接下来分别执行这两个任务,首先将任务创建出来,然后创建两个线程,分别将这两个任务传递给两个线程,最后启动这两个线程。

    从运行结果来看,三秒之后value的值被打印了出来,符合预期。

    不过打印任务中有一段代码存在争议,就是这段while代码能不能被以下两种情况替代?

    第一种情况,循环题里面什么都不写,空转。 

    第二种情况,循环题里面写上continue。

    其实这两种情况是一个意思,所以我们就拿第二种情况和源代码进行对比,我们来看看他们究竟有什么不同。首先我们来看左边的情况,print的线程也就是打印任务的线程,他一直拿着执行权在那里空转,我们的右边的value线程他一直拿不到执行权,所以呢他就无法给value赋值,value的值一直为0,打印任务它里面的循环条件一直成立,while循环一直在那里空转。 


    再来看看右边的情况,打印任务的线程拿到了执行权,

    但是 value的值一直为0。所以即使他拿到了知情权,也会放弃该知情权。此时赋值任务的线程就会拿到执行权,他就会给value赋值,判断value是否等于0的时候,那么结果就会为false。那么此时呢我们的程序就顺利的执行完毕了。以上就是两段代码的区别。

    总结

    最后我们来总结一下本节的内容,本节介绍了thread类里面的yield的方法,它是一个静态方法,可以直接通过thread的类名调用。 

    作用是使当前线程放弃执行权,在实际开发中偶尔会用到它。 


      

    附录:

    笔记完整文本:

    如何让正在执行任务的线程放弃执行权,我们可以使用 three的链里面的yellow的方法,该方法是一个静态方法,直接使用是raise类名调用,它的作用是使当前县城放弃执行权。下面来演示该方法,也是该方法需要用到两个任务,分别是赋值、任务和打印任务。赋值、任务的内容是定一个value属性,然后给value赋值打印任务的内容是当然will you被复制以后,打印万六的值,我们先来编写右边的赋值任务,定义一个静态属性value,初始值为0。 为了让放弃执行权效果更加明显,在给wedding复制之前,我们让线程休眠三秒钟,最后我们给value赋值100,至此赋值任务编写完成。再来看看左边的打印任务,在打印任务中直接输出wag的值,不过这样还没等到给y零赋值,就直接输出了外力的值。所以我们却要在value被副职以前放弃执行权,使用VR循环,判断y轴的值是否等于0。当y轴的值等于0时,直接使用thread类名调用yellow的方法。 十当前现场放弃执行权,至此打印任务也编写完成。接下来分别执行这两个任务,首先将任务创建出来,然后创建两个线程,分别将这两个任务传递给两个线程,最后启动这两个线程。从运行结果来看,三秒之后value的值被打印了出来,符合预期。不过打印任务中有一段代码存在争议,就是这段where代码能不能被以下两种情况替代?第一种情况,循环题里面什么都不写,空转。 第二种情况,循环题里面写上continue。其实这两种情况是一个意思,所以我们就拿第二种情况和源代码进行对比,我们来看看他们究竟有什么不同。首先我们来看左边的情况,普润的县城也就是打印任务的线程,他一直拿着执行权在那里空转,我们的右边的value线程他一直拿不到执行权,所以呢他就无法给value赋值,外料的值一直为0,打印任务它里面的循环条件一直成立,VR循环一直在那里空转。 再来看看右边的情况,打印任务的线程拿到了执行权,但是 y6的值一直为0。所以即使他拿到了知情权,也会放弃该吃侵权。此时副职任务的线程就会拿到执行权,他就会给value赋值,判断y六是否等于0的时候,那么结果就会为false。那么此时呢我们的程序就顺利的执行完毕了。以上就是两弹代码的区别。最后我们来总结一下本节的内容,本节介绍了thread类里面的yellow的方法,它是一个静态方法,可以直接通过three的类名调用。 作用是十当前线程放弃执行权,在实际开发中偶尔会用到它。

  • 相关阅读:
    【Appium】Android 按键码
    【Android】【问题解决记录】Error obtaining UI hierarchy :Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
    【Python】Flask中@wraps的使用
    【Flask】报错解决方法:AssertionError: View function mapping is overwriting an existing endpoint function: main.user
    【Flask】Flask学习笔记(一) 应用基本结构
    【python】面向对象编程之@property、@setter、@getter、@deleter用法
    【MySQL】MySQL内连接,左连接,右连接查询
    【Linux】常见基础命令之文件操作
    【python】【logging】python日志模块logging常用功能
    内网信息收集
  • 原文地址:https://www.cnblogs.com/cj8357475/p/16085990.html
Copyright © 2020-2023  润新知