00:00
各位同学大家好,接下来我们对大场面试题中断机制的考点给大家做一下。案例的分析和编码的实操,那么前面我们已经说过了,这三个方法理论知识说完,但是这三个怎么用,用在哪儿?有哪些特点和优缺点?下面我们不多废话。代码说话,源码走起来。我在众多面试题当中精选出了三个。第一个。如何停止中断运行中的线程?第二个中断标识为为true的话,那是不是就立刻stop当前这个线程了?第三个静态方法interrupted,谈谈你的理解,OK,这三个搞懂,我相信你对线程中断的协商机制将会有明确的认识。来,咱们先来说第一个。如何停止中断运行中的线程呢?比如说现在有AB或者T1T22个线程,T1好好的运行着,但是某种情况下两个线程需要协作,T2发送了一个协商的信号,就T1够了,到这儿就停止吧,那么我希望你停下来,那么前面我们说过了,在这儿有一个非常重要的一句话。
01:10
一个线程不应该由其他线程来怎么着强制中断或停止啊,应该由线程自己自行停止啊,自己来决定自己的命运。我们强调过,虽然说技术上可以实现,但是这个是不礼貌甚至是危险的,我好好的就被别人给替掉,就被就被别人给。Stop就被别人给干掉了,那么这个程序还不乱了,所以说这三个方法我们要用,但是像什么stop啊,Suspend呀,这些动作已过时,OK来了,那么同学们。回到这儿。针对刚才我们的需求,那么我们如何来停止这个线程呢?那么有很多种方法对吧,这个比如说我们大家所学过的生产者消费者模式啊,什么时候你wait,什么时候你都替换,一停一起,一停一起好,这是一种等待唤醒通知机制啊,那么一般啊,我们这儿呢,还会有其他方法,这有很多种啊老师呢,结合。
02:03
我们的API3大方法和我们所理解的,给大家写一些小巧精悍的,第一个通过一个V变量来实现,那么呃,有基础的同学。最好,没有基础的也没关系,大家先照着用,后面我们会深度详细讲解,未来太好。那么先提一嘴。在高并发下面,如果某个变量被V修饰啊,它具备了一种东西叫可见性,在高并发下面,通过修改变量状态来决定程序和系统的运行,这个Y变量是非常重要,那么现在我们希望就是T1正在运行着,T1跟T2都共用同一个V变量,如果T2把这个V变量做了一下设置和修改,希望T1停下来,那么T1。一检索为了调变量。标志位已经修改了,那么我自行的停止,OK,不需要T2来帮我打断,那么再次强调啊。由线程自己自行停止,好,那么接下来呢,同学们我们走起,那么新建一个包,这些呢就省略了,看哔哩哔哩。
03:06
中断相关的知识点来。那么同学们,呃,我们先在外面呢。定义一个静态的V变量,好,那么假设。它呢,是罐型,那么is stop等于那么一开始啊。First,我呢,根本不让你停下来,对吧,是first,那么现在呢,我们就两个。建成T一个T1,那么T1呢?我出我这干着。如果说这个stop是force,那么呢,我呢就根本不用管,对吧,不进来不进来就说明是吧,要运作,那么运作在这块啊,我们是第一个,那么这儿呢,就是。哈,那么现在我们第一种方法是通过tell吧,那么我就用OK,就打印这么一点没什么东西,那么下面呢,我们的意思就是说,如果这是个force,那么相当于说这段就不进来,不进来我就will一直打印这句话,Hello tell OK,好,否则的话,如果另外一个线程把这个is stop从force改为处了,迅速被T1检索到,那么这个时候T1。
04:20
他干的意思就来了,那么就是伊斯多的值。诶。修改为错,那么。程序停止,OK,没问题吧,那么现在正常情况下而言,那么当然我这个在T里面啊,我这个就是T1 hello word,那么肯定是T1在打印,没问题吧,好了。完了以后,那么现在呢?我假设间隔20毫秒以后,T2这个线程来了。他呢,干的活是这样的。T2呢,就发送了一个请求,意思就是把stop这个值从默认的。
05:00
False值为处,那么同学们一看就会明白我这运行多少20毫秒一直打印这句话,直到TR发送is stop first改为我这以检测到为true的话,我是不是就会打印这句话,然后干嘛break,跳出停止,OK,好,那么同学们,我们先来看一下我们此时程序运行的效果。大家看一下,跑完以后,我们现在发现这句话已经打出来了,T1线程也不成功的跳出。结束,这有没有亮灯了?一句话,Is stop被修改为错,程序停止。那么大家请看,现在呢,我们都清楚,V呢,是有一个非常重要的性能叫可见性,对于T1和T2是两个不同的线程,你没有资格去强制干涉打断别人,你只能通过标志位来进行协商。好T2发送stop,希望你force变为错,也即T2运行到一定程度。
06:03
希望你T1停止,我们前面强调过。线程只能自己决定自己的命运,你没有权利去把别人给kill掉,给stop掉,所以说呢,通过我们来决定你stop这个公有变量处和false来决定两个线程的配合,OK,那么通过它我们可以。协商机制这样的一种方式,把T1这个线程给stop,给他停止好,这就是我们的通过跳第一种方案。
我来说两句