00:00
各位同学大家好,接下来我们进入第五章,罗support与线程中断,那么看标题也清楚,本章有两块内容构成,一个叫罗support,一个叫线程中断,那么不知道有多少同学了解这两个知识点,那么接下来我们来看一眼这两个分别是什么意思。所谓罗克斯珀塔,我们大家看一下。是指Java lock并发包下面lock包下面的一个类叫lock support,那么单独来看,Lock是所support,是支持、支撑的意思,那代表是什么?Lock的一种功能和扩张,那么它为什么会被单独拎出来,在面试中会被问到呢?它到底有哪些功能?直白的说,功能相当强大,强大特性非常丰富,好,可以这么讲。结合线程中断机制啊,几乎是后面我们一个最重要的一个章节。Aqs他底层源码的基本功和基础知识,假设你在面试过程当中会被问到aqs的,那么人家一定会问你,那么你了了解一了解过look support吗?嗯,如果这个时候你一脸懵逼,那么人家一定会相信你,对AQS,就算你读过源码,你也根本没有吃透过。好,这是第一个,第二个。
01:19
什么是线程中断机制,诶中断,那么。在Java类里面有三大方法,原模原样的面试题直接来考你。说吧,这三个方法是什么?用在哪?使用过程当中的利弊如何和各自的特点,你了解过吗?OK,那各位同学,我相信如果你们有针对性的训练。对于高并发这样的知识,你可能现在呢,也不能说你完全不懂,但你应该是没有办法十全十美的回答出来。好,那么同学们走起,下面。我们先来学线程中断,再来说洛克斯特来吧。
02:00
先从阿里巴巴蚂蚁金服的面试题开始讲起,那么也是同学们的反馈,那么我就拿了一个,他有很多,因为这道题目他已经点了来,大家都清楚,阿里巴巴的这个蚂蚁金服呢,绝对是高并发高性能的金融系统,那么去面试的同学多线程的知识100%备考,那几乎一进去这个起步价你就要懂guc,所以说对于高并发多线程绝对是你现在硬核编码能力,那么来吧。面试官呢,直接告诉你这三个方法是在Java thread线程类下面的三个方法,那么请问分别什么意思?好用在哪儿?了解过吗?那么如果。英文你看不懂,那现在同学们我们打开中文。就拿这道题目Java long thread。我们查找一下。对于。来,同学们请看现在整个API里面三个高亮显示的方法,中断子线程。测试当前线程是否已被中断,测试此线程是否已被中断,我去,我相信现在会有一种感觉。
03:05
每一个中文你都看得懂,但是合在一块儿你不知道什么意思,你也说不出三个方法的所以然和各自的优缺点。除此之外,他还会问你。如何中断一个运行中的线程?那你说就调用这三个方法,那么请问什么时候该用哪一个。我,你也知道这个叫interrupt中断,我们再来如何停止一个运行中的线程,注意哦,这是什么停止啊,这是什么中断?那么如果人家有两个问题说明interrupt和stop s top这个方法是绝对不一样的,好,那么同学们。接下来我们呢,理论先行,然后再用代码验证,最后带大家做小总结,三板斧走起,什么是中断机制来,同学们先看一眼。首先一个线程不应该由其他线程来强制中断或停止,那么一句话,假如说啊,我们现在这个是一个main线程,它在里面有一个线程T1,现在main线程就调用一些方法,直接把T1这个线程给干掉了。
04:08
那么T1好好的运行着,莫名其妙的就被人相当于什么替掉或者是。是剁掉了,那么你们觉得这个合不合适啊?一般我们都会说是不是命运希望掌握在自己手上啊,所以说为了保证程序的健壮性而言。一般一个线程不应该由其他线程来强制的中断或者是停止,而应该由线程自己自行停止,自己来决定自己的命运,所以说我们在现场里面的什么stop啊呀,Resume这些方法都已经被废弃,那么打开我们的API,大家都清楚最经典的stop,我们看一下什么意思啊,强制线程停止执行,那以前有过这个方法。一点,你就把别人给弄死了,那这还了得,我跟你有仇,或者对你不满,把你的程序调乱了,那么这个时候是不是天下大乱?所以说类似于这样的已过时,已过时,那不再赘述好。
05:04
第二个。在Java中是没有办法立即停止一条线程的,OK啊,也就是你不要这么暴力的什么K啊这样的啊,这些不推荐的方法,意思就是说我们呢,有时候呢。也不得不停止打断一个线程,Stop一个线程,比如说我们取消一个耗时的操作,那假如说啊,同学们,我们以前学过是不是。假设啊,我们呢,TH点。这样的一个方法,那假设。我们停这么长时间,OK,我等不了了,我想离,我想离开,我想打断,那么你是不是也应该提供给我这么一种机制啊?也就是说我打断你确确实实实不好意思,但有时候我们不得不打断,那么这个时候。我们Java就提供了一种用于停止现成的是吧,注意协商机制啊啊,没有说是一种强制啊。中断也记中断标识协商机制诶。
06:02
来吧。所谓的这个意思呢,是这样的,中断只是一种协作协商机制啊,Java中没有给中断这样的一种机制啊,增加任何语法中断的过程完全需要程雪儿自己实现。那么若要中断一个线程,你需要手段的调用该线程的interrupt方法,该方法也仅仅是将线程对象中的中段标识设置成什么触,而不是说手起刀落给人家多了。那杨哥有点模糊说人话,下面我举一个生活的案例。现在呢?就以餐厅。就餐吸烟这么一个案例啊,两个县城,一个叫服务员,一个叫顾客,那么现在我们呢?A线程是顾客在餐厅里面。不自觉的吸烟,那抱歉,刚好这个餐厅又是一个无烟餐厅,那么这个时候B县城服务员会主动的过来跟他干嘛协商,先生你好,本餐厅是无烟餐厅,麻烦你是否可以掐灭手中的香烟,谢谢,那么请问这个服务员对于顾客也只能是跟他协商,温馨提醒吧,他不可能非常暴力的,哥们,你死定了敢在我在的厂子里面抽烟,我弄死你过去把人家打一顿,这个可能不大合适吧。所以说刚才服务员。
07:22
温馨提示,另外一个线程,这样一种过程就叫协商机制,希望你中断stop,停止当前的动作,但。不是立刻给你强制打断,那么这个顾客是不是就被服务员打了一个标识,我希望你能够。中断手上吸烟这个动作,停止你这样的行为,OK,所以说我们现在呢,发现了这个线程当中有这么一个中断标志。我们呢,就要根据这个中断标志来实现自己的业务,那么我们呢,就需要自己写代码,不断的检测当前现场标志外啊,比如说啊,我就是顾客这个线程啊,没事的时候,那假设我吸烟,那突然发现不合适啊,有别的线程告诉我请取消这个动作,这个中断被我打了一个标识。
08:11
是错,那么就希望你取消当前的运行,希望你别再吸烟了。那么表示。服务员这个线程请求顾客中断手头上正在吸烟这个动作,但是他应该由线程顾客这个线程自己自行停止,而不是服务员上来抽他一顿,OK,干他丫的不是这样的。那么此时究竟该做什么?需要顾客线程你自己写代码实现,那么当然,如果我们正在运行着跟其他线程配合其他线程发送了希望你中断的这么一个标识,一种协商。过来了,那么我判断这个结果的值为错,那么OK,我自己可能就会退出,或者是break,或者做其他。那么每个线程对象都有一个什么中断标识位,用于表示线程是否被中断,该标识位处表示。
09:02
自己或者别的线程向我发送了中断请求,这个中断标识位被我设置为true false,表示没有收到过。不需要中断好。那么我们通过调用线程对象的interrupt方法,将该线程标识为设为错,那么可以在别的线程中调用,也可以在自己线程中调用好,这个就是我们用中断,简单一句话,它是一种什么协商机制啊,哎,自己。或者是别的线程把我们的中断标示位从false值为处了,那么我在不停的检索和判断过程当中知道自己这个中断标志位是错,那么我视情况而定,要不要自己决定停止这个动作,OK,再次强调它是一种协商机制,好,那么。接下来我们来就给大家介绍中断相关的API3大方法,那么也就是我们这高量显示这三个,那么对于中断机制的理论,我们就先介绍到。
我来说两句