00:00
下面我们再看第三个题目,静态方法thread interrupted,谈谈你的理解,那三大方法之间我们是不是实例方法?这个和这个在前面几讲给大家做了详细的说明,接下来static这个静态方法给大家说一下。好,那么打开我们的文档。对于这个方法,我们先说理论,再说案例,最后给大家做总结。来。首先。这个方法的源码,这段我已经给大家粘出来了,它的注释。我们呢,也给大家做了自己的总结,对于这个静态方法,用法是这个,看判断线程是否被中断,注意并清除当前的中断状态。有点类似于我们的I,加加先返回一个I,做第一步操作,然后再加加做第二步,一体两面,这个方法是做两件事儿,返回当前线程的中断状态,也就是说中断标志外你当前的值。是处。还是force测试当前线程是否已被中断,OK,如果是错说明什么?有别的线程发起过请求,或者他自己需要中断,中断标志位为错,返回当前的布尔值,第二个返回了以后会将当前的中断状态怎么着心零,并重新设置为false,哎,也就复位了,清除线程的终端状态。那么这个方法呢?稍微有点不好理解。
01:24
连续两次的调用,其结果有可能不一样,所以说我们回到这个方法的源码的文档。他自己这儿写的。中断标识被清空。如果该方法被连续调用两次,第二次返回将。第二次调用将返回first,除非当前线程在第一次和第二次调用该方法之间再次被什么interrupt OK,好,那么同学们,我们这儿给大家写好笔记,那么现在呢,这个呢,很简单,由于它是静态方法,直接调用就行了,我们有且仅有一个线程,就是我们的主线程main线程。OK,那么好。
02:01
那么同学们,那么现在这个是当前,呃,当前线程呢,就是我们的内线程。来,那么thread点二。注意这个时候是不是就是我们的静态方法了,OK,大家看人家返回一个什么静态方法布尔值啊好,我呢干脆掉两次啊,然后此时啊,大家请看。一。那么现在我要干的活呢,就是threat.current threat,那么相当于说这个时候是不是相当于我们的卖主线程,他干了一件什么事,VO。那么相当于说给我们的中段标之外。设置为错,前面讲过了这个方法不再多啰嗦,对吧?它是word没有什么返回,那么如果说。一跟二能正常打出来,说明这行代码一定执行了,然后完了以后同学们我们再来看看,再执行一下。
03:04
那么第三次执行和第四次第四次执行他们会打印出什么东东?好,那么大家不妨呢,可以在纸上做一下判断,1234这四行分别打印出的true false情况会是什么。那么结合我们的。笔记和注释,好,那么同学们,我们跑一下。来,同学们可以看后台。什么东东?刚刚开始啊。本类线程,那么也就是我们的main线程,OK,因为现在尤其仅有一个线程嘛,线程的这个interrupted,它的中断标志状态默认都是first first12。注意,走过了,说明第18行代码一定被执行了,那么此时被执行了以后,请大家看当前这个现场的中断状态是什么是处注意这一行。第一次调用。返回当前线程中断状态的真实值,是错我就返回,错,是false我就返回false返回以后它还有一个连带的二手操作,会把当前的中断状态清零并重新置,为什么force清除线程中断状态,所以说在这一行彻底执行完以后。
04:23
他先返回。处,然后清零中断状态,重新设置为false,那么可不是在下一行第21行来调用我的时候,我就变成false。OK,好,那么所以说这个方法的作用就是这样,那么来。它完了以后,这个代码呢,我们也给大家呢,做了当场的演示啊,那么最终都会返回这个中断状态,两者呢要做一个对比,OK,那么来同学们一个是我们的实例方法,一个是我们的静态方法,那么它们两个有什么不一样的地方呢?其实就是一个布尔值不一样,来同学们第一个方法是不是。
05:04
就是我们的这个没问题吧,那么第二个方法,那么是不是我们的current点。Is interrupted OK,那么这是我们的静态方法。OK,那么这个是我们的。实例方法。OK,那么下面我们来看一下源码。这个静态布尔值,这个一个普通的实例方法,布尔值两个有什么区别,点开。来,同学们,我们会发现。当我点击这个。静态方法的时候走到这儿,大家看这个静态方法,当前的线程is interrupted,然后诶这个标识我们是不是见过,它返回的是它传递进去的一个是什么布尔值参数处,好,这是我们的静态,那么我们的实例方法呢?点开同学们请看此时我一点高亮显示啊,这个是不是我们的静态方法。
06:05
外面暴露了API叫这个名字,底层调的是is interrupted,传的参数是,而我们刚才的实例方法,这个底层调的是这个船的参数是force。原来这两个方法。静态的这个和实力的这个底层调用的都是同一个方法,叫is interrupted,他们两个殊途同归,底子又调用了这个native布尔型方法,这儿有一句话,这个中断状态是否被重置based on依赖基于这个clear interrupt这个值传递过来的是true还是副词,所以说它们两个的区别就是这个静态的传的是错,是否需要清理中段标之位。错,是需要清理,所以说一清理又把它变成了副词。而下面这个。需是否需要清理,这个是force,不需要清理,只返回,没有后续动作,这个就是他们两个最根本的区别,所以说大家可以看得出。
07:10
所有的笔记都给大家进行了抓图源码的整理。那么这。这个是普通的,是false,这个是静态的,怎么着传的是处底子就就调的是同一个native方法,他们呢,只是传舱不一样,仅此而已。OK,那么在这都给大家做了详细的对比和说明,那么最终我们会发现方法的注释也清晰的表达了中断状态,将会根据传入的clear interrrt参数值来确定是否需要重置啊,这段我们也说过了,对吧?静态方法传的是什么处会清除中断?状态因为它传的是一个布尔值true,而实例方法不会因为它传的是for,就这么点区别,哎,所以说这个就是我们静态方法相关的说明。那么最终。三大方法,我相信。这三个怎么用,用在哪儿。
08:01
作用分别是什么?这三个方法是有哪些需要注意的细节,比如说为了避免无限循环,我们需要多调一次等等等等,那么这三个方法也给大家做了详细的说明,我相信大家现在对多线程的中断协商机制啊,应该有一个彻底的了解,好那么最后总结一下就是这三个方法,那么来吧。实例方法也仅是通知目标线程中段,仅仅是设置目标线程中段标注为一个错,第二个普通的实例方法返回的呢,布尔值就是获取中断标志啊,你当前这个线程。这个线程中断标志外是true还是false,是什么就返回什么,实事求是啊,而这个呢,多一少返回了以后还会返回当前值啊,并清零false OK,那么已经详细讲过,我们就不再。照本宣科的阅读了,好,那么下面现成的中断机制啊,就给大家呢,彻底讲解完成。
我来说两句