00:00
准备啊,做好准备跟我呢,下副本打怪。那么学完了这个监听器接口的基本理论之后呢?有一个问题就出现,我们脑海中的这玩意儿有啥用?我知道它何时生何时死,在我开发过程中有多大帮助呢?好,那么我们就回到零六考试管理系统中。那么在这个考试完系统里边,咱们找一个功能,找一个什么功能呢?找一个用户添加功能。好了,那么在这里边我们去看一看啊,那么有一件事情我们想知道什么事情呢?就是我们把用户信息添加到数据库的时候,总共会消耗多少时间,那么我们说呀,呃,一段程序的运行速度,那么它呢,对用户获得服务的使用感受是非常重要的。那么我们来试一试啊,ABB方法呢?责什么呢?负责我们做添加,那么在这里边我们来统计一下,首先呢,我们声明一个日期对象,那么咱们想叫什么呢?叫做start date好了,New,然后写上什么呢?New date好了,这是什么呀?开始时间啊,这是我们添加开始的时间,然后呢,在结束的时候呢,我们再来一个date,写上什么呢?And date好了,等于叫做new date好了在这这是结束时间,然后接下来呢,我们做一个简单的输出,输出什么呢?说我们在添加,添加的这个过程中,我们总共消耗的时间是多少?那么这个时间是多少呢?做一个减法就可以了,那在这里边减什么呢?接着我们就叫做and.get time减去,减去什么呢?Start date.get那么最终我们得到了一个什么?
01:52
是一个以毫秒为单位的时间,我们去看一下啊,好了,那么现在呢,咱们呀,呃,就把我们零六工程呢,重新交给tomcat来做管理,在这边呢,把它抹掉,然后呢,把零六交给他,OK,然后给网站起一个英文的别名,就叫做my one,好保存,保存完了之后呢,那么咱们走一走,测一测看看啊,看看我们每次为用户提供添加服务时啊,用户需要等待多少时间,好啊,请等一下。
02:33
好来来来了啊,那么这边呢,我们先做一个简单登录,它叫ma密码呢,我们想123好登进去,那么登进去之后呢,进入到用户信息注册,我们到点测试数据啊,比如说一一来,那么这里边要想求时间啊,得求个平均值,所以我们来做多次插入好了,用户注册走这第一次,那我们看时间20毫秒好了,再来,我们再插个四五次啊二二,然后让它时间达到一个稳定的值,那我们看一下第二次插入成功呢,12毫秒,然后我们再来用用信息注册,然后这边呢,我们写上这个三三走啊三走我们看一下这把呢13毫秒,好,逐渐要趋于稳定了啊,然后请四四过来,四走注册,然后我们看一下这里边啊九毫秒正在下降,你看这速度在下降,就是说,呃。
03:33
呃,使用越频繁呢,实际上我们的这个服务器呢,它的运行时间就会缩短,那这一把呢,13那么经过这样的几次的这个测试之后啊,经过几次测试之后,我们看一下。我们大体的时间呢,就是12~13之间,那么我们看看在这里边我们得出的一个时间点,那么时间点多少呢?是吧?12毫秒到13毫秒之间,也就是说我们每次在添加时,用户需要等待12毫秒到13毫秒之间的这个时间,那么这个时间快还是慢呢?实话实说,这个时间啊慢啊比较慢,一个用户要等什么呢?要等十多毫秒,那么现在有十个用户过来呢?有十个用户,那么我们说排在第十位的用户,他要等待的时间是多少呢?他要等待的这个时间就是120毫秒。
04:33
对不对,那么此时越靠后的用户时间呢,等待时间就越长,那么这个时间确实已经很漫长了。那么将下来我们就要考虑一个问题,哎,怎么能够让我们的插入快一点?好看看我们的A地方法,那么在A地理这个方法里边呢,其主要呢,是借助于JDBC来负责帮忙把我们的搜Q命令推送到我们的数据库中的。
05:00
那么也就是说时间的消耗点呢,主要是在JDBC的某个环节中,那么问题来了,在JDBC这些流程里边,哪一个环节它是最消耗时间的呢?我先告诉大家一个答案,答案是什么呢?我们看在这,咱们写上在GDBC这个规范中,那么我们说呢,关于connection connection的这个创建与什么呢?与销毁呢,是最浪费时间的,因为connection呢,说白了就是一个L轴接口,L轴接口啊,每次创建和销毁都要花费相对较多时间,不夸张的说呀,这12毫秒底吧,80%以上的时间都是可耐创建和销毁所浪费的。所以呢,答案就出来了,要想让我们的这段插入命令执行和速度提升,你该怎么办呢?最简单的话就是在插入过程中,我们不去创建connection,也不去销毁connection,那么这个时间就会陡然的减少,大幅度的减少。
06:15
但是说到这也有个问题了,如果在这段程序中我们不去创建connection,那么我们的怎么来?大家知道得是通过connect来创建的,对不对?对吧,好了,问题就出现这了,说我们只要在这项程序中不去创建可耐就能提速,那么我们如果没有connection就没有它就不能正常执行,那么这事该怎么办呢?哎,我们说呀,昨天我们讲过啊,在我们填加过程中啊,有很多的。解决方案,这些解决方案呢,如果用技术上去讲呢,他晦涩难懂,很抽象,但是一个比较有趣的现象,很多在编程世界中,这些看起来很高大上的解决方案,在现实生活中已经被我们的各行各业都用到了。
07:09
那我们给大家说一个简单案例,什么案例呢?大众浴池,大众浴池那我们看一下啊,说什么呢?当一个人去大众浴池要求洗澡服务的时候,那么我们大众浴池会干嘛呢?会直接给这个用户一个拖鞋使用,那么当这个用户洗浴完毕之后呢,这个拖鞋不能被带走,也不能被销毁。他需要把这个拖鞋留在浴室中,供下一个客户来使用,那么在这个过程中,他实际上就是为了什么呢?提升我们的服务速度,来提供你的方案拖鞋,那么这个拖鞋啊,他可不是说来一个用户,我们新买一个拖鞋浪费时间,那么他在什么时候会买这个拖鞋呢?往往是在开业前夕,在开业前夕的时候啊,他会事先购置一批拖鞋,这样的话呢,来一个用户就把一个空闲的拖鞋给用户去用,等到用户用完之后呢,拖鞋不做销毁,放在这儿给下一个用户提升速度。
08:18
也就是大众玉石的拖鞋管理方案,那么听了这个管理方案之后,再回到我们当前的这个代码场景中想一想,在做插入的时候,我们不去创建connection,但是呢,还需要使用这个connection。那么想想怎么办呢?很简单,这怎么办呢?我们在这个网站启动的时候,在网站启动的时候呢,我们预先创建一批connection,我们创建一批通道,这些通道呢,就相当于一些拖鞋,那么等到ADDDD这个方法在运行的时候呢,我们就把空弦的通道交给ADD来使用,那么当AB完成插入操作之后呢,这个connection我们做不做销毁呢?我们不做销毁,留着留给什么呢?留给我们的ADB下一次使用,那么这个时候它就可以提升插入的这个速度了。
09:23
在这好了,那么沿着这个思路,各位你再给我往下去想,我们要在tomcat启动的时候创建一定数量connection,那我怎么知道tomcat会在什么时候启动呢?想一想,我怎么知道toca会在什么时候启动呢?你看啊,我们的toca它在启动的时候一定会做一件事情,什么事情。他们在在启动时一定会做一件事情,什么事情呢?它会为当前的这个网站创建出一个全局作用与对象,对不对?而我们刚才在学习过程中,我们见识过一个接口server light contact Li接口,这个接口呢,就是专门来监听当前网站中全局作用对象何时被创建,何是被销毁的,那么也就是说,如果这个contact last方法被调用的时候,我们就会确定contact正在启动,那么此时在这个方法里边我们就可以创建一并数量可定式。
10:36
那么这些connection什么时候我们不用呢?当我们的to关闭的时候,To关闭呢?这些通道就不需要用了,那我怎么知道contact什么时候关闭呢?还是这个接口中的一个监听方法contact type方法,那么这个方法它会在contact关闭时被触发。所以利用这个监听器接口,我们可以在con启动时先创建一定数量connection,然后在con关闭的时候干嘛呢?把接connection做销毁处理。而在运行期间的时候,当AAPP需要用到connection时候,我们拿一个事先建好的connection给A用,这样将大幅提升我们的运行速度。那么接下来沿着这个思路来,我带你下副本,打个怪,看看你能不能吃了它。
11:28
好了,那么在这里边,在我们零六这个网站中,我呀将去新建一个监听器,好,我们写上com.BJ power note.li给它起名呢,就叫做Y好了,保存放完之后呢,这个监听器呢,它要监听全局动性的声死时刻,所以我们让它实现一个接口,那写成什么呢?S,咱们写上contest listener这个接口好了,然后在这里边呢,我们去重写两个方法,Contest方法和conest方法,那么在这个方法里边,我们看一下要做是用什么呢?就是在我们的这个,在它启动的时候,我们预先预先呢创建20个connection好了,然后呢,在我们的这个什么呢。
12:28
啊,在这个user do.ab这个方法执行时,在执行时,那么我们要将要将事先事先创建好的这个connection干嘛呢?去交给交给我们的ad这个方法使用,这个connection就是我们这个拖鞋,这是这个拖鞋,好了,那么我们看看啊,建踏20个connection这事难不难呢?不难,我们做一个20次的for循环。
13:05
第一个变量I呢等于一,I呢小于等于20,那么I呢,加加,那么每一做一次循环呢,我们就创建出一个链接通道出来,那咱们写呢,那这里边就通过这个u ta啊我看咱们写上啊在这,呃,写上jbbc u ta啊创建一个UT对象,等于叫new,用GDBCUT利用这个对象UT点调一个方法get connection哎,我们就能建connection,那这里边我们做一个输出说呢,呃,在我们的这个啊,我们写上啊在啊在咱们的HTP这个服务器,在当前的这个什么呢?这个服务器在启动的时候,我们去创建了一个connection,然后这边写上什么呢?Con好了在这,那么我们总共建多少connection呢?20个20。
14:06
可能是,那么我们说呀,对象一多不好管理,那么在僵化事业中呢,如果想一次性管理多个对象,一般会把这些对象干嘛呀,放到集合中,例子啊,Set呀,Map,那么在这里边我呀来一个map,我之前给大家讲过啊,那么在实际开发过程中啊,开发人员比较喜欢用map,因为map呢,它非常的灵活啊,用map,用map呢来装这20个connection,那么怎么装呢?Map里边是以键值对的方式来存储的,其中这个K呢,要保证其唯一性,那我们怎么做呢?我写上map.put。这个K要保证其唯一性,那么怎么办呢?我就把当前这个通道在内存中的引用地址作为什么呢?作为其K,哎,放进去,哎,肯定不带重复的,20个通道,20块地址,那么Y值写什么呢?我写上一个出,我为什么写个出呢?我们说说啊,那么在里边这个出呢?它表示什么呢?表示这个通道它现在处于什么呢?处于空闲的状态。
15:20
那么如果我给它设为false呢,表示我们这个通道它正在被使用,这也很好理解,你到这浴池里边一看,地上有一双拖鞋,你上就穿吗?可能不行,为什么呢?你一穿,池里边出个男的,诶,哥们儿,哥们儿,这是我的拖鞋,我还得用的,你去拿个空闲的拖鞋。所以当我们从map里边去找一个connection给ADDDB方法用的时候呢,先要确保这个通道现在没有被使用,所以默认值呢,写个出,当我们在使用这个connection的时候,把这个值设为false就行好了,装箱,那么装完箱之后啊,有个小问题说什么问题呢?
16:04
我们的connection耐啊,啊,我们的这个map,就说map map是不是我们当前这个方法里边的一个局部变量啊,啊,Map是这个方法中一个局部变量,好了,那么这个map的生命周期有多久呢?Contest in need light,这个方法他执行完毕之后,那么作为局部变量的这个map在这里边就被销毁了,那么他被销毁之后,他名下的这20个内存我们怎么用呢?我们用不了啊,主人公嗝屁了,那么主人里边的这些connection我们就找不到了,怎么办呢?我们看看,因为在项目运行期间啊,这20CONNECTION我们得一直让它活着,一直能用上它,所以我们需要把它干嘛呢?把它交给一个寿命比较长的一个对象来管理。
17:00
那么在我们的这个网站中,哪一个对象的生命周期是最长的呢?你看又涉及到了生命周期这个问题,我之前给大家反复讲过对象的生命周期这个知识点一定要牢记于心,各位同学来,谁能告诉我?谁能告诉我?在一个网站中,哪一个对象的生命周期是最长的呢?诶,我们看全局对网站一启动的时候,呸,夫妻一启动的时候,全局兄弟啊就诞生了。那么在这里边呢,上下文对象呢,也是我们说的全局作用对象啊好了,那么在这里边呢,当这个网站关闭的时候,全局动的特被销毁,所以在一个网站中活的最久对象就是这个全局踪对象了,所以在这写上我们的思路说呢为了啊说为了在我们的这个HTP这个服务器在它运行期间的时候一直都可以啊,我们说我们看一下一直一直都可以去使用这20个com co1,那么在里边我要将什么呢?将我们的这个connection把它们保存,保存哪里去呢?来保存到我们的全局作用与对象中。
18:29
这叫做思路,好了,我们给家讲过,我们不记命令,记什么呢?记流程原理,然后呢,在写代码的时候呢,按照这个流程原理来组装我们的思路,思路弄完之后,接下来是什么呢?就是命令的,那么有的同学说是猜,我们在写命令的时候是猜,但是我们要对我们之前的步骤要非常清晰,我想干嘛?我在这边想拿到一个全球综对象,想把我们迈里的二次肯能还是放到全球总课中,目的是什么呢?在服期运行期间,我们一直能用这2CONNECTION,所以我得有一个全局通用对象啊,那我们看看之前我们得到全局通对象是借助于request帮助通过request呢,那么我们呢,向。com去索要当前网站中的全局重对象。
19:18
当然这里边比较尴尬,比较尴尬在这个方法里边,人家并没有request,这个对象没有,诶,这里边有一个我们不认识的一个参数,Server that contest event,那么这时候我们才要去用猜的方式,我们猜这个对象里边能不能帮我们获得全体动力项,所以大家猜的是什么呢?猜的是。命令,而不是说猜的是步骤,说我们去看一看,把它叫过来,哥们儿,我想用全球通对象,你是这个方法里边唯一的参数,你能给我吗?好了,我来点一下,猜一下,我们没看,今儿个运气太好了,这个对象里边第一个方法就是来干嘛呢?向tomcad索要群众对象,尽管此时我还不知道这个参数是干嘛的,但它里边有这方法过来,然后我们在里边写上server LA,写上application,好了,Application,然后接下来干嘛呢?把这个map的地址放到全体比中,那我们就写上了application.s写关字,比如说叫K啊,叫K1吧,然后把map的地址放去,行了,哎,在这。
20:43
那么这时候在我们网站启动的时候呢,建出二核connection,打包装箱放到map即可中,然后把map的地址呢放到什么呢?放到我们的全局作用域对象中,那么此时在项目运行期间,麦普名下的二次connection就一直可以被我们在进行使用好了,这是第一步,那第二步呢,Connection终究是要被销毁掉的,所以在D套方法中我们写上啊,在我们的HTP这个服务器关闭的时刻,关闭的时刻,那么我们要将全局作用于对象中的这20个connection。
21:26
干嘛呢?来进行销毁处理,在这做销毁好了,那么首先第一步我是不是得得到全集中对象呢?考虑到上一个方法使用的经验,那么这个serve context一般的这个参数,他能不帮我们去索要到权利纵向,至于说他是谁已经不重要了,反正能帮忙就行。过来拿到这个全局重用对象好了,然后咱们写上several light come,写上application行了,然后这时候干嘛呢?从全局里边掏出这个箱子来好了,我们看一下,写上application.get attribute,关字什么呢?K1诶,我们就掏出了这个箱子,那么这箱子里边有什么呢?有20个活蹦乱跳的connection好了,那么现在干嘛呢?要把他们挨个摁死,挨个摁,那么怎么不干呢?过来在map中。
22:26
我们的K就是链接通道地址,所以我们要找到这些K,所以写上map,点什么呢?KZ,先把map中的所有的K取出来,放到一个set集合中。那么我们知道S的集合里的数据是无序的,是没法变利的,所以接下来要做的事情是什么呢?把S的中数据交给一个迭代器,迭代器呢,可以将无序的数据做一个简单的排序,那么现在我们生成一个迭代器对象,它将我们这些K做了一个简单的排序,然后现在通过我们便利这个迭代器,通过便利这个迭代器我们就能够干嘛呢?我们就能够去拿到这些K好了,i.net每次拿到的是什么呢?每次拿到的是一个connection,对吧?Map里的K不就是一个connection的对象的地址吗?
23:26
对吧,在这那好了,那这干嘛呢。那么note它之前呢?先判断一下它是不是已经是为none了,好了,写上如果connection不等于nu行了,可以把它干掉了,那么干掉之前总得人家允许喊一嗓子吧,然后写上sot,写上啊,说兄弟们啊兄弟们啊,说我,我是谁呢?写上connection啊我啊,这个什么呢?这个先行一步,然后写上我啊先行一步啊,先行我车一步好了,我们说什么呢?20年后啊,老子还是条好看对吧,他都快嗝屁了,得让他干嘛呢?得让他呀喊一嗓子,要不然呀,人走的憋屈。
24:20
诶,在这儿搞定行了,那么这个监视器咱们是不是写完了,写完之后呢,说要做个注册呀,回到我网站通的这个配置文件里边来,好了,在这注册我们的监听器好了,好来啊,在这选上注册,注册咱们的监听器怎么写listener,哎,然后写上cm.B方点listener,诶怎么没出来呢,我看看啊。嗯,他为什么没有出来呢?稍等片刻啊。
25:00
哦,是这么回事,事情是这个样子的,那么我呀,推到这块来,我看一下。保存,像这两个包包呢,其实我已经写从了me,哎,在这这把呢,应该能点出来了啊,点你来了点va行了,保存,那么现在当pump管理这个网站的时候,在启动的时候,这个网站的监听器呢,就会干嘛呢,键在2SH,在其关闭的时候就会把二塔销毁掉,我们试试好了,在这啊我们看一下啊,那么现在呢,我们重新启动一下看效果。嗯,啊。走。看好了,20个活蹦乱跳connection即将诞生。看到没有,看到没有啊,看到没有,在这20个connection哦,我们把这些connection的地址作为K放到麦克中,20CONNECTION行了,那么现在呢,这清空。
26:13
我们把服务器关掉,那么这20CONNECTION干嘛呢?在服务器关闭过程中依次被销毁,哎,这样我们的服务器在运行的时候。A,方法是不是就有肯定去使用了就有了,对不对,不着急啊,我们看同学的问题啊,我们看一下啊。那么在这里边我们看一下他咋知道map里的这个通道有没有在用呢?通过什么呢?出和false,看到没有辐射啊,这里边啊,好了,然后呢,文字是这么讲的,说可以把map啊定义为one listener的全局变量吗?呃,在这里边我们看看啊,倒也行。
27:00
One listener全局变量可以,但是你怎么得到one listener的实例对象呢?你怎么能够得到one listener他的实力对象呢?或者说啊,你怎么知道它的是对象的,这个对象的创建呢,是由comp派创建的,并且呢,在serve规范里边并没有提供我们去获得某个监听器实例对象的方法。所以我们一般不会这么做啊,不会这么做,这里边儿好了,嗯,那么我们看一下呃。咱们看啊,往下去走走啊,我们看一下,那么现在有了,那么现在还是一个小问题,怎么能够让我们的abd方法在运行时拿到这个connection,诶,此时涉及到了什么呢?重载重载,你看啊,跟我走,打怪打怪啊,跟我走在SR最下面过来,然后在这里边呢,我们回到u do中找A方法。
28:12
那么在这个方法里边,你看啊,获得一个交通工具,怎么获得交通工具的呢?借助于这个克瑞STEM的方法,这个方法怎么执行的呢?进去一看,在这个方法中先调用get connection来得到一个通道,再由这个通道来干嘛呢?来生成交通工具,那么这个方法该CN,你看他在执行的时候,每执行一次都要去扭出一个新的连接通道,不好不好浪费时间怎么办?聪载重载说,大家注意啊,将来在我们工作的时候,比如有人说了,说这个方法有问题,你改一下,切记。切记什么呢?不要在什么呢?不要在原方法中做修改,大家记住说某个方法告诉你有问题要改,切记不要在原方法中做修改,而要采用什么呢?重载的这个方式,那有人说凭什么呢?我们在编程中呀,我们看一下所有的行为都是有规矩的,那么在编程过程中,大家可能没有学过一个知识点,叫什么呢?设计原则啊,这个不是设原则,这是传奇,我们看一下,我们看看说说什么呢?说摄像头设计原则,它是所有我们程序员在进阶的时候都要学的一个技术设计原则咱们看一下,诶那么我们看看设计原则,我们在编程中,你几乎所有的行为都是来自于设计原则中的六大原则,那么在这六大原则里边呢,其中有一个原则叫叫什么呢?它呀,叫做开局原则。
29:55
这是在编程世界里边儿最原始最根本的一个原则,开辟原则,那么啥叫开辟原则呢?大家别怕啊,乖,别怕啊,开辟原则是说的什么呢?他现在家说的是这样的,我们的这个方法应该应该干嘛呢?应该对扩展开放,对修改关闭,诶,什么意思?当一个方法写好之后,就不应该在这个方法上做修改了,那么如要修改怎么办呢?采用扩展,那么何为扩展呢?即为重载,即为重载,这是我们在编程的这个内容,所以当有同学不愿去背,原为不愿意去背流程,我觉得不可思议,因为你是干嘛吃的呢?你将来就是靠原理和流程来写命令的,你连这连基本的规则流程不背,你就去记命令,那你能写出啥呢?你写东西谁敢用呢?所以我们都是合理的,所以在这我们将完成一系列的。
30:55
重在修改好了,好来在这先要它啊说在这里边呢,我们要通过什么呢?要通过这个全局啊,通过这个全局作用欲啊,我们写全局这个作用欲对象来得到,得到什么呢?我们的这个这个这个connection好了connection行了,在这先让stop,我们将做出一组重载方法,好了,我看掉先重载谁呢?先重载这个方法get con这个方法对他做重载,那么何为重载呢?在同一个类中允许出现多个方法没相同,但参数列表不同的同名方法,此类重载好了,那么我们说呀,对参数列表不同,那么再加什么参数呢?我们想想再加什么参数呢?这根具体需要做首先第一步,那么在这里边我们要拿到。
31:55
Connection connection哪呢?在全局中市场中,所以你得先得到全局中对象,说我们干嘛呢?说我们要通过通过这个请求对象来得到我们的全局作用与对象,好了,那这边得有个request调用方法,Get好了,向contactca去讨要,讨要拿到我们当前网站中的这个全局作用对象application好了,那你是不是得有个请求作用对象呢?那么在这声明把它作为参数证明,Htp threat这一块等调的时候,从外面把请求对象调过来,能从哪个这第一步,然后第二步呢,干嘛呢?在这里边慢慢写上,我们要从要从什么呢?我们的这个全局作用域啊,全局这个作用域最小中来得到,得到什么呢?那个小格卖,所以我们。
32:55
显示啊,MY等于application.get up good,那么在这里边那个共享数据名叫啥来着呢?叫啥来着?Ke啊ke好了,那么这map里边现在干嘛呢?就放着什么呢?放着20个活蹦乱跳的connection好了。
33:17
然后接下来我们看第三步,看第三步说第三步干嘛呢?第三步我们要从从map步中去得到,得到一个什么呢?处于空闲状态的connection,就是从小格里边拿一双什么呢?处于空闲状态的什么呢?拖鞋,拿双拖鞋好了,找找呢map.k set.a特先把map普通K取代方S合通,然后呃,交给迭代器来做简单处理,瑞it好了在这,然后现在变类这个迭代器喽,Well well好了,写上什么呢?i.S好了,那么每做一次循环,那么在这里边我们就拿到什么呢?拿到了一双拖鞋,就是一个链接通道,那么这时候这个程序是不是要。
34:17
好,结束执行了呢,不是的,你怎么知道你拿了这个拖鞋没有被其他人在使用呢?我们在map里边啊,我们看看K,我们在监听器里边,在监听器的map里边,我们可是干嘛呢,有一个value值,竖的表示这个通道没有被人使用,所以当你拿到一个connection之后呢,你得问问麦哥呀,这个connection对应的值是不是出。好了,那么在这里边我们去写一下过来做个判断,这要什么呢?呃,map.get connection,它将得到一个布尔值,哎,Bol音布尔值,咱们写上一个flag好了,这边做一个强角Bo音格值好了,那么我们写上如果呢?如果,如果我们发现什么呢?发现我们当前的这个flag值咋的了?相当于true,那行了,不用做循环了,反正这一双空闲的拖鞋搁用,那如果不是呢,接着走,肯定能找到一双空闲的拖鞋好了,那么当外药循环结束之后,在这儿瑞把我们的connection返回,诶,这是从什么呢?从全局作用对象中来拿一个空闲的connection好了。
35:47
那么可耐拿出来之后干嘛呢?得用它去创建我们的交通工具,对吧,这种工具,所以这个方法也将被重载,也将被重载,那么我们复制一下啊,CTRLC。
36:02
那么他要怎么被重载呢?在这里边搁这承载一个,说这个方法执行时它要调的是哪个connection呢?调的是这个有参的get connection,它里边得有一个请求对象,对不对?那么这个请求对象谁给呢?得有这个方给,那么这个方法他是不是得加上一个参数进来啊,他给不了啊,从外部给HP serve request,好,后来全参是不是这就O了,Re e。哦,在这的个包包httpert啊,Let是在这行了,那么re,诶,我们看看重写了http threat request行了,这个方法存在了,那么这个方法在哪里被用呢?在我们do中被用在这好了。
37:08
这方在这里边用,那么此时怎么办呢?ABB做重载,大家记住方法写好之后,如果要做修改时后不要在方法上做修改,只做重载,记住这是什么开辟原则,开辟原则大家有兴趣的同学啊,去看一看啊,去看一看我们说的这个设计原则,他是你将来一定要搞定的一个东西哦对对对对对对对,可变出要变成false,对对对对对,可爱的王辉,我太爱你了,I love you啊对对对,在这里边,在跳出去之前,这个通道空的,我要用,那么map.put把这个动态值设为我们这个false,哎,设为false啊,Thankyou啊thankyou行了,那么在这里边我们看根据开局原则,那么ad方法运行时,它调的这个方法里边得有个request,那怎么办?从材CTRLCCTRLV。
38:08
然后在这里边,这个方法里边得有一个request,得有一个request OK,那怎么办呢?他也没有啊,只能向上级领导要ATP,这你去看RKST承在一个好,在这行了,那么在这个方法里边,你看我们就从选举纵里边拿到了一个什么呢?事先准备的通道,优质通道建控小车来推送四合命令。然后呢,在这做销毁那么可乐的方法干嘛呢?要把这个通道给灭了,那我们玩几次速度就慢了,怎么办?重载,把close方法拿过来做,重载CTRLC,然后在这里边咱们来。说哥呀,这个connection你不能销毁掉呀,那怎么办呢?过来在这说,我们在这里边可以通过request.get serve that content得找到这个全总对象啊,这里边S dr.t content写上,然后呢,我们一看哟,这方法里边需要一个请求对象呢,HTP给这一放行了,然后在这里边干嘛呢?从2VACATION里边点get attri拿到什么呢?拿到那个math说老板,拖鞋我用完了,我把你的拖鞋放回到鞋箱里边来,那么怎么放呢?怎么放呢?我们看一下ma.put然后把connection放进去,这边写是什么呢?出,哎,这是什么呢?返回connection,我用完了,把拖鞋放箱里边,把它变成。
39:56
成一个空弦的拖写好了,所以呢,所以我们的这个do在这,我们的这个承载的这个do的AB方法在这里边close干嘛呢,得把request放进去啊,行了,这时候写完之后呢,那么找到我们说的这个什么呢?到我们说的这个threat。
40:17
找他哥们,你要调到这个AB方法里边得填一个request,我们serve里边有没有request呢?人家还真有加进去啊,开好了进来了,行了,怎么样,一顿操作猛如虎,不知道有多少同学跟到我这一块了,没事儿,这一块儿呢,只是让大家做一个扩展,开阔大家的眼界啊,开阔眼界了好了,那么写完之后速度能提升吗?如果不出意外的话,应该是要提升的啊,所以说是提升的应该是远远的小于12~13毫秒时间。
41:00
我也不知道会提升多少,走起来跑个四五次,看看这把插入需要多少时间,好,我们看看啊。启动建立20、connection。多二童先生进来了,好了,我们开始登录了,麦克123走,你进去好做插入操作。先来一个999好了,注册成功多长时间,气不气人,直接拉到两毫秒,看到没有圆是多少毫秒?各位12毫秒啊,我们看一下啊,走过来,然后写上什么呢?呃,这个666过来,666走看时间两毫秒。哎,上去就很稳啊,叫HH吧,各位走多长时间两毫秒过来很稳了,现在啊,然后这里边慢慢写上啊,这个5555走多少时间四毫秒,这个偏多一点,偏多一点,但是经过几次的模拟模拟我们看一下啊。
42:16
走,看这。三毫秒,那么我们的时间最终大家可以看到,我们说提升之后惊不惊人,我们时间差不多是两到三毫秒,等号三毫秒,再擦一个试试,差不多就是时间啊,就这时间WW,然后走。多长时间啊?两到三毫秒,各位看到没有?看到没有,这就是啥鬼原者乘以多长时间啊?12~13毫秒。搁上去啪啪啪一改,其中多少倍啊,我们算一算,二乘以几等于六啊,嘿,二乘以几等于12啊,二六一十二二六一十二对不对?我们的提升速度可以达到什么呢?六倍的提速,那么这意着什么呢?这意味着我们的插入在单位时间里边,它接收的访问量是之前的六倍对不对?哎,提速操作看到没有?看到没有?哎,在这里边哦,看到没有啊,是不是要把connection设计成根据访问量大小能够自口扔对的,那么这就相对来讲呀,要更深一步了,老杨带各位呢,先到一个一级副本里边去转转,你们现在属于什么呢?你们现在属于穿着小草裙拿着小木棍的新人,你们是新人村,所以老杨呢,先带你们到一级副本先逛一逛。
43:51
你说这个呢,得涉及到什么呢?二级或者三级副本里边来,老杨不敢把你带进去,怕你进去之后就出不来了,我你看像一级副本里边儿,老杨带进去的人出来的其实就没几个,不敢说没几个,刚才咱班里边没几个能提问的这几个,你看能提问这几个都是平时干嘛呢,哭着喊着说听不懂的人,他们现在都从书本里边出来了,你说多气人呢,各位多气人啊,啊我你高警察看有没有问题啊。
44:22
好了,模拟高并发这一块啊,那么在这里边写一个线程池,写个线程池来调用就行啊,就调用就行啊,当并发令成千上万的时候,没有空闲多些,那么这个请求挂了吗?不是的,我们connection呢,它实际上呢,在单位时间里边呢,可以接收的是1200个connection,就是1200个管道,那么记不记得我们的这个list?讨厌李松,你把我答案都说出来了,对,我们可以模仿这个map,模仿例子做扩容,而且要保证什么高频发扩容,这属于第二局副本,老杨先不带你们去了,带完之后我怕,我怕什么呢?今天测评,我怕带你们进去之后,完了你们见不着我了,你们见不到我了啊,我不愿循序渐进,不要急功近利,各位慢慢来,你就看吧。
45:15
所以你说在这个编程这个东西有没有趣,有趣啊在里边,哎,在这里边寥寥几笔运行程序就发生了。
我来说两句