00:00
然后呢,后边这个重心呢,就涉及到我们落地如何去创建多线程,第一种继承thread类的方式,把这个就关了啊嗯,咱们把这个代码呢,是我给写到咱们这个工程下了。嗯,这个在这儿呢,第一种创建方式,这个咱们考试也考了,所有人呢都得掌握。那具体的代码呢,我就不往这去写了啊,这四四个步骤,嗯,继成一个thad子类重写让方法,然后创建子类对象啊调stop,嗯,这里边呢,有两个特殊的特别的问题,我们给大家也讲解了,第一个问题,这个呢大家要清楚,第一个问题,我们呢去启动一个线程能否调用run方法,不能,我们启动一个线程必须调用star的方法,哎,然后不能呢,去调用这个run,哎,调用run方法的这个方式啊去启动线程,这个呢要注意一定是错误的,因为咱们这个star方法呢,它有两个作用,我给你呢写到这儿了,对,一个是启动,然后另外一个呢是掉转,你要是光直接掉转,相当于你这个线程你根本就没起来,还是在这个主线程当中去操作的。
01:23
好。程,那么第二个问题,如果呢,我们用了一个子线程或者叫分线程了,我再想去创建一个分线程啊,能否还调用原来这个子类对象的一个star方法,对,是不可以的啊说如果呃,在这个启动一个线程是不可以这个,或者我们这样说吧,就必须啊重新创建一个。创建一个thread这个子类的对象,然后哎调用哎此对象的start方法。
02:10
你不能还用原来人家那个对象再重新让他跑一次啊,这个是不可以的,咱们呢,演示的时候也说到了,他会抛一个异常的问题,二是吧,当然会抛一个叫illegal来这样的一个一场啊好,这个呢就是我们这两个问题大家要注意一下,嗯,接下来呢,我们是讲到这种实现的方式,这个呢,其实习惯以后呢,其实也比较简单啊,直接呢,我们就把这个几个步骤呢粘过来,哎,CTRLC,哎这呢是嗯,看似呢相当于多了一步,嗯就是这里边的话呢,我们需要造的呢,就是这个reable实现类的一个对象了啊嗯,好,这呢是四步,这个呢是五步,下面呢关于二者的一个对比啊,涉及到他们的一些联系等等的,这呢咱们就把这个呢拿过来来CTRLC一下。
03:02
来对比啊。嗯,咱们这里边提到他们的这个相同点,那都需要去重写这个run方法,把我们这个代码,这个线程呢,要执行的操作呢,都写在这个run当中啊,同时的话呢,这两种方式写完以后,大家你会发现咱们要想启动一个程序啊,在咱们现有的这两种方式当中,是不是都是不是得调这个方法呀,哎,就是你都得是去调这个start,我们去让它启动起来,不管你是继承也好,实践也好,都调的是同一个start没问题吧。是同一个了,诶是的,就是咱们不都是调到thread里边这个重启,那这个start嘛,方式二呢,你直接就是new的这个thread,那肯定是自己的了,第一个的话呢,我们是thread类,你又没有重写star方法,所以还是你调的thad里的这个start,那这其实也可以看成是它们的一个相同点啊,就是要想启动一个线程,在咱们这两种方式当中,都是直接调到start。
04:05
那么还有新的方式,新的方式呢,就会有所不同了,诶从代码上来讲,我们就没有直接的再去调start,哎,这个注意一下啊,这个呢,你也可以写到这啊,就是目前这两种方式,因为咱们说这个5.0还有其他的方式了啊,咱们先说这两种,目前这两种方式呢,我们说呢,这个要想启动这个线程,哎,都是调用的。这个thread类中的这个start方法。诶保存一下啊好,这个呢,咱们就说到这了,这个需要大家清楚啊,这个当然面试的时候不会让你去问说这几种,这两种方式有什么区别,这个这个不会问下面一个呢,提到说线程当中的常用方法,这个呢咱们是写了一个专门讲方法的一个代码。
05:01
嗯,方法呢这呢,你可以看成是咱们分了两波来说的,第一波呢,就是常用的这样的一些方法,CTRLC这一波这个字呢,当前这样啊。成这样,这呢是咱们说的这个第一波,然后第二波的话呢,提到这个线程的优先级。咱们呢,可以去设置这个线程的优先级,以上的优先级高一点啊,低一点啊,这个高低的区别呢,应该是这个CPU呢,就是你要高的话呢,它就是可能会优先的去分配你是吧?注意我这时候说的叫可能会优先的分配你,对是从概率上来讲的,并不是说呢,100%的一定会先分配你,诶这个注意好,这叫先生的优先级。哎,这个我就放到这儿了,嗯,咱们呢,后边这个先把这个拿过来,咱们后边呢,讲到这个线程的这个通信啊,咱们这不是在这会会说叫线程的通信,线程通信的时候呢,咱们还会涉及到三个方法,这三个方法呢,叫wait,叫naughtyify,叫naughtyify oh,嗯,这三个方法,当然呢,这三个方法你要注意它并不是定义在咱们的thread类当中的,也没有在renoable接口中,这三个方法呢,对,这三个方法呢,是定义在咱们的object类中。
06:33
嗯,所以呢,我们讲RI类常用方法,其实呢,他们仨按说不算了,但是呢,你要从咱们整个线程的使用上来讲呢,呃,也确实呢,用过这三个方法啊,仅此而已啊,这不是咱们wad里边的这个三个方法了,这个稍微注意一下就行,然后在咱们这个PPT里边呢,提到一个叫现成的分类,这个大家了解一下就行。在这个方法这块。在这有一个线程的分配分类,这个大家呢了解一下,咱们Java当中这个线程呢,这个分成两种,一种呢叫做守护线程,一种呢叫做用户线程,诶大家稍微关注一下这个,嗯,我举个例子你就知道了啊,比如说咱们写这个Java程序,写完以后,咱们让它跑起来,这个时候呢,你会有一个没方法的执行,咱们把它叫做主线程了,这个主线程就是一个用户线程。
07:28
那么有没有守护线程呢?有,咱们说这个Java程序呢,咱们写的时候呢,里边它一开始就会有这个这个多个线程,其中有一个呢,叫垃圾回收线程,这个垃圾回收线程它就是一个守护线程,那么守护线程跟主线程有什么区别呢?这都是线程呢,都得执行啊,都是执行路径是吧?区别呢就是当我们这个用户线程如果要是执行结束的时候呢,这个守护线程呢,也就会结束了啊,也就是说这个守护线程它其实相当于依赖于咱们这个叫用户线程,我们一个扎va虚拟当中,它这个这个在执行过程当中啊,它不会说我们这个这个这个扎逊一在执行过程当中,只有这个守护先生。
08:12
不会只有守护线程的啊,它至少呢需要有一个用户线程才行啊,因为用户线程要结束的时候呢,它就也会结束了,嗯,这个要注意一下这个事啊,那么我们这两个线程呢,其实你也可以去给他去做一个设置啊,这个我们就是比如说你这目前呢是一个用户线程,你可以调这个线程的一个叫set demon啊,这样就把它改成写成个处的参数,就变成一个守护线程了啊守护线程了,所以说Java虚拟中都是守护线程,这Java虚拟呢就退出了。啊,这个意思啊,这个大家了解就行,那么形象点理解这个我想了半天,哎,想了两个成语啊,然后觉得非常的合适啊,自己还讨论了一下啊,啊叫这个兔死狗烹,鸟尽弓藏。还是比较形象的是吧,能理解吧,哎,兔死狗烹兔,就相当于是我们的用户现场,那兔都没有了,这个狗这个守护现场也就不存在了,哎,这个呢,也对应的鸟是用户啊,弓呢就是守护是吧?好,这个呢,大家做一个了解啊。
09:15
CC。这个字稍微小一点。保存好可以了,那这呢是咱们前一天讲的这个内容,然后今天的话呢,咱们这个讲的话呢,就是生命周期同步,这呢是一个重点,也是个难点,然后后边呢,涉及到线程的通信和这个新增的两种创新方式,这个呢也是一个需要大家掌握的点,这呢就是整个咱们关于线程这块的一些内容。
我来说两句