00:00
好,同学们,我们继续说到这儿,我们用三种方法外了太阳原子的布尔型,以及我们用现成的中段API完成了我们的诉求,可以停止一个正在运行的线程,哎,通过这样的变量的修改啊,线程和线程之间通过这个标志位的判断来达到我们的目的,那接下来。对于我们线程API中断的这个API,我们对它的底层源码要进行一下讲解和分析,那么对于这两个方法的说明,我们在笔记上都有,OK也已经强调过多次,不在啰嗦,不在赘述,OK,那么这个呢,就是返回一个布尔值,好,当前线程它的中断标志位是处还是负词?那么来吧,来看一下这两个方法的源码,分析它为什么能够。获得这样的功能。来。笔记红色部分是重点,那么干脆呢,我们还是回到我们的呃,源代码吧。来,同学们。第一个我们先说interrupt没有返回值,这个就是一个普通的实例方法。我一点。
01:04
大家请看他在这儿走走走走走,搁到这儿了,以后还记得这句话吗?Just to set the interrupt flag,只仅仅是设置一个中断标志啊,这个已经强调过多次啊。我们这儿突然发现。当你调用interrupt这个实例方法的时候,其实质而言,底层是掉了一个INTERRUPT0这样一个方法,那么再继续点开,大家请看什么东东?Native,但凡有j vm Java虚拟机的底层知识都清楚,Native代表是调底层操作系统或者是第三方C语言的函数库。那么所以说得到。我们站的中断。实质而言,是由底层函数来给我们作证,来给我们支持的,好,那么回到这儿以后对于这个方法我们可以简单的来看一下啊。这上面呢,有很多信息,那么干脆这样也给同学们整理好了,那么来一样的啊,你要是看英文的不爽,咱们看中文的也OK。
02:00
作用就一个中断,此线程前面强调过,就是把当前线程的中断标识位从false设置为处,然后的话呢,它并不是立刻停止当前的线程,OK,那么在这块我们这儿有两个小细节请大家注意,大家请看,如果该线程阻塞的调用巴拉巴拉巴拉这一大堆方法的话,那么这个类的方法,那么它的中断状态将会被清除,并且将收到interrupt。Exception中断的异常,那什么意思呢?也就是说,假设。某个线程在调用调用这些方法,另外的线程突然调用了interrupt,那么这个时候它将会被打断,爆出这个中断的异常。哎,这是第一个细节,第二个请大家看。中断不活动的线程不会产生任何影响,哎,也就是说现在这个线程必须在跑着,你不能说是不活动了,否则的话,这个方法有没有意义,有点类似于他已经死了那么用的。
03:00
起来的话呢,作用效果不明显,OK,好,那也就是说中断不活动的线程没有太大意义,也不会产生任何影响哈,这个呢是我们API好,那么。我们呢,已经明白了,原来interrupt底层调的是INTERRUPTED0NATIVE的一个方法,好,这是我们的第一个。那回到我们这儿呢,判断了这个呢,Is interrupted,这个要怎么来说明呢?来同学们点开看一眼。这个说的很清楚,如果是错,如果当前这个线程已经被设置为中断,它的中断标志为是true的话,否则的话就返回这个false otherwise,好,大家请看。它那是一个实例方法返回不啊,但是其实质而言,底层继续大家看高亮显示啊,原来我们在外面API层面最外壳掉的是一个普通的is interrupted这么一个方法,但实质而言,底层掉的还是一个native的方法,但是大家请看。此时这个方法上它会传递一个参数进去,叫可interrupted。
04:03
出还是false,也就是什么一个布尔值是否清除标记位,哎,说白了就是要不要对这个中段标志进行复位,那么大家请看我调这个方法,底层而言,其实是调的是它,它也是个native的,有底层C语言函数库保证,然后传一个布尔值,可以读一下上面的这段解析。返回这个线程是否被中断过,那么这个中断的状态。是否被重置,你看,Is or not based on,取决于当前的。Interrupted的这个值传递过来的这个东东,那么也就是说比如说我调这个我传的是什么force,那么目力所及可以看出可利亚interrupt它是什么,不用你干,传的是for OK,所以说这个就是他们两个底层源码相关的东东,那么我们在这也给大家在笔记上做了详细的抓图,那么最终给大家做一下说明和总结来。
05:01
具体来说,当一个线程调用interrupted的时候。如果线程处于什么正常活动状态,注意刚才我们是不是说过不活动的线中断,不活动的线程不会产生任何影响,就是说如果说是一个不正常的线程,不活动的线程,这个方法其实作用已经不大了,能理解。所以说我们目前。前提。线程处于正常活动状态,那么会将该线程的中断标志设置为处。注意,仅此而已,还记得我们说过吗?先生,请面烟警示一个商量。被设置中断标志的线程将继续正常运行,不会受到影响,后面我们会代码证明,所以interrupt并不能真正的什么。中断线程,Stop,停止线程,仅仅是打个标志位,需要被调用的线程,怎么着自己配合才行好,这是第一个,那么第二个,如果线程处于被阻塞的状态,比如说T1这个线程现在自己呢,可能在调用的这些方法等等等等,刚才我们是不是看到过最大一段,那么在别的线程当中,假设T2调用。
06:07
当前线程对象的这个interrupt方法能理解了吗?那么也就是说在T2里面。它调用T的interrupt,刚好T的T,这个线程在用这些方法呢,那么线程将立刻退出被阻塞的状态,并且抛出一个什么中断的异常,OK,好,那么同学们通过圆码的分析和API相关的讲解,那么我们呢,就得到了最后这两个结论,这也是我们三种方法的展现,以及对这两个apipi的解释和源码分析,好,那么通过这样的方法。自带的API完成,我们停止中断运行中的线程,就给大家说。
我来说两句