00:00
好,各位同学,我们继续接下来我们看下一个面试题,当前线程的中断标识被设置为错误的话,是不是线程就立刻停止,那通过前面的讲解,我相信这道题目大家应该是心里有数了。答案不会立刻停止。好,那么回顾一下上一讲我们这儿所说的。只要我们调用interrupt方法正常活动的状态下。线程的中断标志位设置为错,仅此而已,被设置中断标志位的线程将继续正常工作,不会受到影响。第二个,这大堆。那么会抛出一个什么interrupted exception异常,这两个是什么意思?我们马上代码证明好。下面。大家看一下,我们先把代码解释完了以后,再来看一下,这有个什么进一步加深,OK,那么相当于说是对上面的这个呃解释,再做一个后手的案例面试,就是它好,那么下面同学们请看。我们新建一个类啊,哔哩哔哩这个还是同一个包,下面interrupted demo2。
01:05
先把结论拿下来,实例方法interrr仅仅是设置线程的中断状态为处,不会立刻停止现场,那么求证明,好,那么同学们。和之前的写法一样。我们搁到这儿了以后呢,嗯,又要调用T1哈,我们。要把这个拿出来。第一点。好了。我们现在呢,这么干啊。这有300次啊。用最简单的。那么这个就是我们的一个值吧,哎,就简简单单写一个,哎,没问题吧,假设T1启动了以后,这个线程的任务就是在后台。300次打出爱没问题,OK,那么接下来我们来吧。那么现在呢,这个呢,就是T1。线程默认的。
02:02
中断标志,那么这个值啊。那么大家请看,那么是不是我们第一点。Is interrupted这一个上面前一讲才刚刚讲过的这个返回布尔值的这个方法,对吧?那么默认同学们我们都应该明白它是不是应该是个force啊,OK,那么接下来我们来看一下。两两毫秒。相当于说t start以后默认的中断。标识位是不是应该是个force,然后这运行什么两毫秒,那么300是不是开始。打印了300次这样的这个输出I就开始打印,但是两毫秒的话肯定是打印不完的,对吧?那么此时大家请看我们t1.interrupt,那么这个时候是不是将它的中断标志位设置为错。OK,那接下来的话呢,我们就来喽。第一个,那么现在就是T1线程,嗯。
03:00
把这个拷贝下来吧。调用。方法。后的中断标识,那么来这是我们的第一次啊,没问题吧,那么现在相当于说在这个之前调用之前应该是false,因为默认的嘛,没人中断,我肯定是false。然后两毫秒以后。我调用这个方法。根据前面我们所说。会把中断状态位设置为处,中断标识为出,那么此时我马上要求你给我反馈。T线程调用这个方法之后,它的中段标识啊,那么第一次啊,我们得到的是这个没问题吧,那接下来我们来看看啊,为了给大家好看,那么现在这打印这那个打印这三百四啊,如果说。第一,Interrupt在这儿我们已经知道了,那么他呢?这一块呢,东东是不是也应该给我们打印出这个错,我们先一步步的判断完了以后在这儿,那么T调用中等标志会,那么这是什么,我们第二次相当于说如果执行到这儿。
04:07
OK,那假设能够真的被中断的话,可能300次啊,只是输到第179次啊,他会马上戛然而止跳出来,那么这个时候我们这个T1改一下。看就这么个动作,那么他也应该是打出来是true,那么也就是看只要这一行打出来是true了,说明中段标志位从force设置为true。发过去中断标志位的请求,假设能打断,那么300次肯定不到,就会立刻被跳出来,对吧?那么这个时候我们在这儿的话也应该是错,这个线程就应该结束,OK,好,那么同学们我们来设置一下看看。调用interr的方法以后,会不会立刻终止这个T线程的程序不打印了,这马上打印错已经代表是被终止了,那么然后我离开会不会呢?来同学们,我们跑一下。
05:02
看看后台的程序,那么来同学们,首先T1默认的中断标识是负四。第23行这个程序没问题吧,完了以后start塔我们也检查出来了,它是force默认没人找我打断嘛,那么巴拉巴拉巴拉这么哒哒哒哒,然后过了一会儿,第27行这儿运行了两毫秒以后,那么大家请看,慢慢的,哎,打到第132的时候,我们会突然发现。第27行执行完成,这个是错,马上输出下面的第一线程,调用interrupt后的中断标识,那么我们零一只是为了好标识啊,第一次来看多少是错,那是不是符合我们的预期和推断?中断标识位从force没打断到现在有。标志位要让你打断,打断变成处,可是这个编程处理后,大家请看300次的输出有没有突然中断,没有,是完完整整的输完了多少,300次以后,我们发现这个时候零二,我们只会的趋势区分,这个零二就是在这一段里面的,那么所以说这个时候多少是错,那么和前面的这个是不是可以对得上,也能够吻合,没问题吧,所以说我们得到第一个问题,实例方法interrupt仅仅是设置线程的中断状态为错,不会停止程序该干嘛干嘛,说难听点。
06:25
顾客,请切,熄灭你的香烟,我不OK,人家不会停止,没有配合好吗?好,这是第一个问题,第二个我们这么改。和之前差不多。来,同学们。我这呢改为2000,那么2000毫秒是不是两秒钟完了以后呢,我再继续。访问T1,它调用这个方法后的中断标识,但是我这是第三次访问,那么下面我的问题是。两秒钟过了以后,大家猜测一下它的出false值应该是多少好?
07:02
从一开始默认它是负四,这块设了以后将中断标志位是为了出完了以后我们马上问,设置完了以后这个方法再去调用是多少是错没问题,最后这个是多少,零二这个是多少是错也没问题,大家请看程序运行着没问题吧,不会中断,不会停止,程序300次打印,打印完了以后你看这是标识是零二,现在是出OK,那么下面我们的问题是。两秒后,我在第三次中断标识零三这个编码,那么请问这个时候应该打印出还是负四,大家可以思考一下,好,我们跑一下我们的程序。来大家看一下后台的运行哈,和之前的应该是一样,首先T默认的是个force,没人打断我对吧,然后呢,在。两毫秒以内,巴拉巴拉各种打印,一直打到了我们的176行,然后对应着。
08:01
27行调用了interrupt,将中断标志位设置为。True,所以说你此时中段标识零一这段的话来告诉你它的值是处没问题,然后完了以后这个是处了以后,我们呢,不会停止线程继续打印,一直打印打到300次以后,大家请看我们这儿零二这个标识。是括号里面的OK,这段里面的是多少是处,但是为什么大家看了一下2000毫秒以后,我们再来中段标识零三,第三次来看的时候它却是false呢?难道我们这个它会自动的变形,是从处。变成force吗?不是这样的,那么切记刚才我们带着大家读API。是非常非常重要的内容,来这儿有这么一句话,对于这个interrupt方法啊,我是不是和大家说过这段比较重要,然后还说过最下面中断什么不活动的线程不会产生任何影响,也就是说。
09:05
我们这儿一个线程打印多少次啊,300次啊。你这是2000毫秒,早就已经打完,也就是说T1这个县城早就已经拜拜了,人家都已经真的停止了,可以这么讲,死翘翘了,好比这个抽烟的顾客都已经离开这个餐厅了,你奉劝他需不需要熄灭香烟,这不是没有任何意义了明白,所以说我们在这儿才会在上面的案例说过。处于正常活动的状态,也就是还在运行没死的,那么这套规矩是OK的。没问题吧。但是如果我们。两秒钟以后,T1这个线程已经结束了,那么不活动的线程不会产生任何影响,所以说我们在这儿,它这个值到最后怎么着是false。OK,理由就是我们API上这句话我们。不活动的线程不会产生任何影响,因为2000毫秒以后,T这个线程彻底的生命周期已经结束了,OK,好,那么各位同学,这个就是我们用代码首先给大家证明了第一个。
10:12
是中断,它不会stop警示,设置个标志,为为出好,那先给大家介绍到这,难的是这个,不要走开哦,继续。
我来说两句