00:00
好,继承thread类这个方式呢,咱们就讲完了,就是这四步啊,大家呢下来呢,诶写一写咱们这块呢,为了能够熟悉一下它这样一个过程,咱们呢再做一个练习,哎,我这呢去新建一个包,这个包你看注意啊,咱们在这个呃ecl当中,比如我这是这个Z16吧,哎,我这写的是个Java,我在这个位置啊,大家你看我点右键,我要是去新建一个包的话呢,诶它会给我们列出来你本身这个呃原有的这个包,然后这块呢,我写一个比如三。哎,Finish相当于这块呢,并列的给我们造了一个啊,这是它的这个情况,然后呢,你看一下我们在这个idea当中,我现在呢是在这个下边啊,在这个下边呢,我要点邮件去新建一个包,你发现它这块任何提示都没有,那我就先暂时呢先写一个啊,比如我就写一个JAVA1了,这个时候你点一下OK,诶你会发现呢,它是在我们你选中的这个包下面,帮我们又造了一个包啊,这个你注意有点这个区别啊,那我们不想这样做,不想这样做的话,你就做一个delete啊,那这时候意味着什么呢?如果说你是想造一个com.at硅谷点后面这个不一样了,你要选它呢,那你就把前面这个路径呢,你写完整。
01:13
啊,这样,然后写一个练习,哎,这样子去写啊,这个我们点OK,就这好好选错位置了啊,选错位置啊,就是不能这样啊,它就永远是在我们这个下边了是吧,你得点这个啊在src下我们去点这个拍位,哎,就相当于你点入现有的这个包,它都是在这个下边创建的是吧,然后点来一个EX1啊点OK。哎,就这样了,这样呢,又因为你前面这个康点硅股大家都一样,所以呢,它就会这样的方式去呈现,嗯,好,那下面呢,咱们在这个,哎,其实你看看看这块啊,在这块呢,你看咱们在这个idea当中,我这个Java下边有一个thread test,这是咱们这个文件名,这个文件里边呢,你会发现咱们写了这是一个类,这是个类有两类,你看这块它有一个这个这个三角是吧,你点开它能看到你这个文件里边有几个类啊,是这样子啊,诶在这个ecr下,咱们现在呢写一个练习。
02:12
诶,我这呢叫的一个DEMO啊。好,这个练习做什么事呢?哎,我们说哎叫创建,哎两个线程两个偶叫分线程吧,创建两个分线程,然后其中一个线程,哎,我们让它呢去遍利100以内的偶数,然后另一个线程便利100以内的奇数。咱们刚才那会儿做的这个题目呢,是两个线程都是便利100以内的偶数,现在我变了,一个是变列偶数,一个变利奇数,这个怎么做?怎么着?他俩做的这个事不一样是吧,不一样怎么办啊,造俩对象那肯定得俩对象啊,你就是都是变了两呃100以内的偶数,那也得造俩对象是吧?那两对象造男什么类的对象呀。
03:23
嗯,这个题目的难点在哪呢?就是咱们刚才做的这道例题,两个线程做的事一样,相当于你那个run方法,是不是写法就完全一样了,那咱们就造了一个thread的一个类了,那现在呢,你两个线程做的事不一样了,那怎么办?哎,那你就自然而然的是不是就造两个thread的子类啊。诶,这个是比较直接的一种解决方案了啊,诶那就是这样来考虑,诶所以这块呢,这个题目其实也不是说特别难,只要你分析清楚就可以,诶class,比如我还叫my thread,我叫一让它呢去继承于诶咱们这个叫thread,好继承它以后呢,我们去重写这个run方法,在这个转方法当中,咱们呢,让他去变利100以内的偶数啊for I,哎,这样就从零开始吧,哎,100以内的偶数,然后i.s out一下。
04:17
这感觉上是比我们用eclip稍微快一点是吧,再把它呢,这样复制一份,这个呢,我就TH2这个位置呢,啊,这个写错咱们是偶数哈,这来一个if啊,如果I序目二等等于零。这样的啊。哎,这个呢就是不等于零,这呢就是便利这个基数,嗯,好这两个代码呢,就写完了,写完以后呢,那你回到这块,我们这呢,写一个没方法,哎我们呢去造各自的对象。哎,这个呢,我叫一个M1吧,诶你一个,哎MA1好,这是一个M1,这呢来一个M2。
05:04
哎,接着呢,我们分别让他们去做一个大的操作就可以了。啊,对,上面这个得改一下啊。嗯,保存一下,这样是不是就可以了,嗯,这个时候的话呢,我们去看你可能又不太清楚到底谁打的是谁,咱们在前面也给他加上这样的一个声明。的加上这样一个这样。CTRLV一下,好,这就写完了,写完了咱们执行一下。哎,这样就OK了,那咱们在有他们之间这好像没有这个交互啊,就没有这种穿插的这个第一个啊,有还有一个哈。
06:03
哎,再来一次。这个呢,你每次执行按说这个效果呢,都会不一样了,这就涉及到咱们这个CPU的一个切换了,哎,我执行一下这个线程这个一,然后我再执行一下这个线程二,再执行线程一,执行线程二,所以你每次呢,呃,这个看这个数据的时候呢,它显示的情况呢,会有所不同啊,这呢就是一个交叉的情况了,好,这是咱们说的这个练习的一个解决啊,就是大家呢,不要觉得特别死了啊,就是你这呢,这个线程做的是这个事儿,这个线程呢做的是这个事儿啊,那你把这个要做的事儿呢,写在这方案里边,既然你做的事儿不一样,那你就是提供各自的RA的重写,那就意味着呢,你这呢是继成了一个S类,这呢又是另外一个集成一类的子类,哎,就可以了啊。行,这呢是咱们说的这道问题,那这道题的话呢,其实哎,我们还可以呢,更简便一点的去写。啊,就是我们平时在开发的时候,如果需要去创建多线程了,我们可以选择用咱们这里说的这个集成的方式,但是这个集成方式呢,比较规范的话呢,就是1234这四步,那我们也可以呢,就是把这几步呢给它诶合成一下,虽然说也还是这四步哈,但是呢,我们就可以选择更简便的一种方式来写啊怎么来写呢,我们在这里边啊,既然呢,你现在创建的这个MYTH1这个类呢,就用过一次,造过这一个对象,后边呢也不用了。
07:28
咱们说如果你要只用一次,后边就不用了,可以考虑是不是用匿名的方式啊,诶对,所以咱们这块呢,可以稍微简便的去写啊,咱们称作叫哎,创建这个TH的这个类的匿名子类的方式啊。哎,类的这个方式,哎,这呢也是一种方法啊,怎么写呢,我就new一个thread,用个thread,正常来讲我去做一个star的方法,这就相当于是造了个线程,它启动了,显然这样写不对哈,你这时候呢,要调star,是不是去调到shad自己里类里边的那个run了,对,咱们不想让他调那个RA,所以咱们在这个位置,我呢整一个大括号,然后呢,我给回撤一下,对,我在这里边呢,去重启这个run方法。
08:22
嗯,你像我这呢,是重写,那显然呢,我这个nude它就不是一个thread啊,而是new的一个thread,匿名子类的一个对象,但是这个此类呢,又没有名,所以咱们这块呢,就是拿这个thad来充当的啊,是这个意思,具体他做的这个事情呢,就是我们这个事儿,哎,你把这个呢就粘过来就可以了。嗯,当我们调这个star的时候呢,它去调ad里的runread里的run呢,被这个run方法呢,给覆盖了,重写了,所以我们就调的是它了。啊,这是其中的一个事儿,那再来一个,哎,你再去new一个thad,跟刚才一样啊,做一个start的调用,那在我们这个小括号这个位置呢,整个大括号重写一下这个run,哎,去执行咱们下边这个基数的便利。
09:11
哎,这样子,哎,所以说呢,我们这道题的话呢,其实大家如果简单的去写啊,还可以这样去写。哎,这个格式呢,大家要能够看得懂啊,这是咱们前面讲面向对象里边的一种语法啊,这个我们执行。啊,其实一样啊,也是这种情况啊,行,这个呢,就是咱们说的这道练习题,哎,通过练习题呢,大家去,呃,有两个要掌握的啊,第一个就是不同的线程执行的事儿不一样了啊,那就是各自呢去继承于W类,哎,然后第二个的话呢,体会一下这个匿名这个W类的这个匿名子类这样的方式呢,去启动一个线程啊好,这个呢,我们就停一下。
我来说两句