00:00
各位同学大家好,接下来我们用八锁的案例就是演示所运行以后的八种情况,一个一个的过来给大家详细深度的解析一下snchize是什么,我们到底所所谓的加锁加在哪锁的是什么?好,那么同学们请跟着我来通过这章的学习,我相信你对S从源码级和自建码级别将会有深度的了解,那么你对Java的锁才能算是真真正正的搞懂了。好,那么接下来我们呢,先来看看所相关的八所案例的编码演示啊,给大家说明这个知识点,那么理论实操小总结,首先。打开阿里巴巴Java手册,那么再次强调一遍啊,我用的是这个,呃。2020年8月3号1.7这个版本啊,尽量和老师保持一致,那么按照他最新的规约。我们在第一章。第七节高并发编程的时候,它有一些要求,那么来找到我们的第七节,大家可以看到啥强制啊,也就是说如果你进阿里进大厂的话,那么这个已经是业内的一种通用规范,那么大家请看高频发的时候,同步调用应该尽量去考量。
01:10
锁的什么性能损耗?还记不记得以前我和大家聊过。先完成后完美,从功能到性能,诶在大厂里面编代码,你做一个生产级别的产品,那不是写完就行了,上线就行,那不是这样的啊,根本不是能跑就行,你是要注重性能的,所以说按照它的要求对并发,那么能用无锁的数据结构就不要用锁,相当于说因为我们都晓得啊,加SNCH或者加lock当然能保证程序的一致性和数据的正确性,但是并发度是不是下降,程序性能会下降啊,所以说能不要用锁你就不要用,要用的话也不要锁,整个方法体说穿了就是尽可能使枷锁代码块工作量尽可能小,也就说你枷锁的力度不要一竹竿打死一船人,OK,好,那么能用对象锁就不要用肋锁。
02:02
哎,你看它是层层递进的啊,要注意锁的力度啊,就说白了,你这个S方法也可以要,但是锁的函数最好少一点,还要注意能用对象锁就不要用内锁,那么什么叫对象锁,什么叫内锁?哎,从这可以看出,短短一句话,我们要八种案例给大家说明白,好,那么彻底给大家搞懂新课奈子同学们请跟着我来。现在我们就看一个题目,谈谈你对多线程锁的理解,那么现在呢,大家请看我们这儿呢,有一个iPhone啊,有一部手机,那么俗称就是我们的什么资源类,就是相当于这个。多线程吧,后来调度这个资源类,那么熟悉杨哥guc初级篇讲课的同学都听过一句口诀,是不是叫线程操作资源类,对吧?以后呢,May呢,它就是一切程序的入口,里面起两个线程,我们共同来操作这部手机,它就是资源类以及线程有两个资源类,目前有一个,那么好,现在智能手机可以发邮件,可以发微信,用钉钉发短信等等等等,所以说我们大家请看啊,那么现在这部手机里面呢?
03:07
我们呢,孙后他也知道。Y,那么这个时候sin妙,那么同学们。没有任何问题吧,这是发邮件,那么里面呢,很简单啊,那么这呢,就是我们的send。Email OK,那么这儿多说一嘴。老师,你不是说能锁区块就不要锁整个方法体吗?那你要是严格遵守阿里手册的话,那这块你为什么不用这个?第一个首先啊,我们这为了程序简洁好看,因为这个时候锁的话只有几行,一行就是你用S方法和S代码块都一样,OK,我们本节主要是为了讲清楚S,所以说这你用哪一个都可以啊,具体情况具体分析,就一行代码你用什么都可以,好这是我们的第一个功能,第二个功能我们大家请看一下SMS这个是什么代表。
04:00
上面这个你用手机它还有一个方法发邮件,手机发邮件这种功能OK吧,第二个手机发送什么短信好就这么简单,所以说接下来我们来看一下,那么。按照我们的要求和想法,上面一个资源类里面包含了两个方法,那么现在我们的口诀就是什么?线程操纵资源类,OK,那么第一个我们先来看这个main方法,就是一切程序的入口,他现在有没有资源呢?没有,所以说一言不合。过来这儿。那么现在这个就是我们的什么iPhone OK,那么相当于就是我们的资源类手机,那么现在呢,是我们的第一部手机,好,那么现在两个线程,假设这个线程就叫A吧,那么线程A操纵这个资源类,OK,那么现在他呢,要干的活呢,就是发邮件没问题吧,那么大概这嗯,为了保证啊我们的效果200,那么暂停毫秒,这是这个,那相当于说就是。
05:02
保障啊,这儿的意思就是。A线程。先启动,最先启动就这么个意思,他没有什么其他业务逻辑好,那么接下来。同学们,这是什么?B线程没问题吧,那么B线程的话呢,还是这个资源内。OK,相当于AB2个线程操纵资源类,A要用它发邮件,B要用它发短信,中间这个main线程啊,只是说话跑完,而且驱动了AB2个线程启动,它并不参与手机的使用和业务逻辑,OK,所以说在这停200毫秒只是保证A先启动,B再启动,我们为了演示这个效果和顺序好,其他没什么。那么下面请大家看来判断。标准访问有AB2个线程,这是最简单的,对吧?A线程调用的是发邮件,B线程调用的发短信,那么请问你先打印邮件还是邮还是请问请先打印邮件还是短信,OK,好,那么各位同学如果方便的话,那么。
06:05
屏幕前的观众们,朋友们,可以先拿一张纸写出你认为这个时候我运行程序先打印出邮件还是短信,好,请写在纸上,我先暂停一下录屏同学,我相信已经写完了,那么这个时候我们来跑一下我们的运行效果。此时程序运行了以后,我们来看看,拭目以待,是邮件呢还是我们的短信?等了一会儿,那么大家请看这个时候是不是先打印出我们的邮件,再打印出我们的短信,我相信这个应该大多数同学都能够写,对对吧,这个很简单,就是两个普通的增算值方法,好的,那么下面我们来看啊。方法中。加入。暂停三秒钟。那么请问。我们现在先打印邮件还是短信发这个什么意思呢?就是说在这个资源类里面的发送邮件的这个方法。
07:04
我呢,暂停三秒钟。OK,相当于说这是停了。这个课没有停啊,各是各的,OK,现在没有呢。在没方法的业务逻辑里面还是一样,那么A调用邮件,B调用短信,那么第二种情况,请问发送邮件的这个方法里面,我加入了暂停三秒钟,那么请问先打印邮件还是短信?请同学们写在纸上。好,我们来跑一下。那么现在我们的运行结果是什么样呢?请看。诶。我相信屏幕前的你,或多或少或有。跟我不一样的想法和答案了,你可能会觉得奇怪,这停了三秒钟,这个没停啊,那应该是打印,先打印我们的短信啊,怎么还是先邮件呢?好,我们先放下不表,后面统一讲解,那么我相信。慢慢的你的答案会越来越偏离你的日常的理解,好,下面大家请看啊,那么继续第三种情况。
08:07
添加一个。普通的哈方法,那么。请问先打印邮件。还是哈好,各位同学请大家看一眼啊。Public。VO。Hello。他没有任何。过多的内容。注意。我并没有在它上面加SYNCH,换句话说,这两个是普通的SNCH同步方法,这只是一个非常简单普通的一个实例方法。那么好,下面我们就会发现A,我让他继续调用邮件。但是B呢?不好意思啊。Hello,这个方法能跟上,所以说A发邮件,B调用hello,那么请问现在先打印邮件还是先打印哈,好,那么同学们,我们给大家演示一下,请做一下判断。
09:10
好,各位同学,大家请看。哈喽。然后呢,三秒钟以后邮件打印出来,不知道屏幕前的你写对没有,好下面请看一下我们的第四种案例情况,那么现在呢,就是。有两部手机。那么请问先打印邮件还是短信,什么意思呢?这是负一,这是几?负二,那下面我们就说A。要用的是for send email,然后我们这个。B线程呢,它呢是负二点。Send短信OK,那么请问有两部手机号?还是调用邮件方法,还是调用短信方法?那么请问他们各自先打印出什么好?
10:03
同学们,我们第四种情况,大家呢,跑一下。来,大家请看两部手机啊,这是我们的第二种情况,上面的方法还是一样,那么此时发生一点点变化,先打印出了短信,再打印出了邮件,好,这是我们的第四所。案例演示,那么接下来大家请看,那么现在呢,就是修改一下。有两个啊。静态同步方法,那么。要。一部手机,那么请问先打印邮件还是短信,那这是什么意思呢?那么大家请看啊,现在呢是static。静态同步方法。OK,好的,那么现在呢,两个都是从原来的普通同步方法变成了静态同步方法,OK,上面的照旧,那么下面呢,我们呢,请看题目第五种情况及一部手机,所以说在下面这我们呢,还是AB2个线程用同一部手机没问题吧,那么现在A发邮件,B发短信,那么请问第五种情况先打印邮件还是短信好同学们。
11:20
我们呢,来跑一下。来,各位亲,请看。发生了暂停,先打印出了邮件,再打印出了短信,好,那么下面第五种结束第六种。还是两个静态同步方法,注意那么现在呢,有两部手机。OK,它又不一样了,那么同学们请跟着老师来,现在。两个静态同步方法,但是不好意思,负一负二各用各的,那么这个时候大家觉得第六种情况,那么请问两个静态同步方法上面没动过,有两部手机凤一凤二,那么请问先打印邮件还是短信好?各位同学我们跑一眼看一下它的运行程序的结果和效果好。
12:08
大家请看,依旧等待,还是先打印出邮件才能打印出短信?OK,这是我们的什么?第六种情况,那么下面再来看第七种情况,注意。有一个静态同步方法。有一个。普通同步方法,注意一部手机一部手机,那么请问先打印邮件还是短信好?我们先说需求,什么意思呢?有一个静态同步方法,然后呢?有一个普通同步方法,注意。发短信这个方法,我把这个static关键字给拿走了,那么现在几部手机,一部手机那么好。把这个注释。还是同一部手机,那么现在就是一个静态同步方法,一个普通同步方法,AB2个线程用的是同一部手机,那么大家请看一下,判断一下,它应该打印出。
13:07
先打印邮件还是短信?那么请大家做出你的判断,大家请看,先打印出了我们的什么短信,然后打印出了我们的邮件。好,这是我们的第七种情况。来。下面第八种情况,有一个静态同步方法,有一个普通同步方法。有两部手机,那么请问先打印邮件还是短信,好各位同学,那么接下来我们来跑一下啊,哎,抱歉,这一这一波的话呢,这个没有不算啊,这波的话抱歉,呃,没有改我们下面这个。来,同学们请看,那么现在呢,就变成A线程找的是第一部手机,B线程找的是第二部手机啊以本次为准,那么现在第八种情况以本次为准,有一个静态同步方法,有一个普通同步方法,有两部手机好,一个静态一个普通,那么两部手机送一送二,OK,好,那么各位同学我们来跑一下。
14:06
此时我们会出现的情况还是先打印出我们的短信,然后再打印出我们的邮件。OK。那么同学们,下面。问问自己,这八种情况全部做对的,你有几题?再次强调一下,什么叫对象锁,什么叫类锁?哎,所以说snchize真的是很重要这个。关键点和知识点OK,那么代码就给大家说到这儿,下面我们将会复盘一锁一锁一种一种情况呢?把这八种情况给同学们剖析清楚。
我来说两句