00:00
大家好,我是海波老师,线程的创建以及它的启动,还有基本的一个代码的执行,咱们给大家演示完了,那么其实啊,我们的创建,包括咱们的启动和咱们的运行啊,都有相应的一些状态与之对应,那么从线程的创建到最后的结束呢,整个线程的对象会有很多的状态的变化,那么这些状态呢,我们就称之为叫线程的生命周期,那么线程都有哪些状态呢?我们这个可以看一看,在我们Java中的源码当中,它里面会有一个状态的类,这个类当中大家可以看到我们有12345,我们六,总共有六个状态,那么这六个状态我们该怎么理解呢?我们这里通过画图的方式给大家简单的说一下,我们这里首先啊,我们就把一个我们的new,咱们先画出来这个new是什么意思呢?很简单,就是创建新的意思嘛,我们叫做新建。这个状态啊,就是在我们创建一个新的线程对象的时候,我们的状态就会出现,诶我们的线程的第一个状态就叫new了,那么我们new了以后,大家可以看到我们这里呢,会有个叫做start,咱们叫启动,你启动以后,这个线程就处于可运行状态,所以呢,我们这里来拷贝,拷贝以后,那么这里呢,我们就给它写上了啊,咱们来叫做run。
01:15
我们这里呢,咱们拷贝一下。好了,我们放到这边啊,去掉,我们想它叫做可啊运行哎,我们的状态,那好了,那这个呢,我们就用绿色来表示一下吧,好不好用我们的绿色来表示一下,哎,那我这个用我们的这个蓝色吧。好了,那么我们把这个箭头呢,我们划过来啊,就意味着我们调用了一个方法来实现了我们这个可运行状态的一个改变,诶老师啊,那么你可运行的话,那么线程可以运行,那线程什么时候结束呢?大家可以看到我们这里呀,我们会有一个什么呢?我们的run方法,这个run方法呢,就是这个线程的一个逻辑代码执行的位置,一旦这个代码执行完毕了,这个wrong方法就结束了,那么这个run方法结束了,这个线程就没有执行代码的地方了,所以整个线程也就结束了,那么这个时候我们就会有一个状态出现,这个状态呢,咱们就叫结束状态,对不对,所以啊,咱们拷贝。
02:11
拷贝以后,咱们把这个拿过来一个终止状态啊,咱们拷贝拷贝以后把这个去掉,哎,咱们就说一下,这个叫咱们称之为叫终止状态。那么颜色呢,我就用咱们的红色就可以了,来把这个箭头拿过来,所以啊,我们从新建到可运行再到终止,这三个状态呢,就是线程执行时的基本运行状态,但你说谁还没有一个马高凳短的时候啊,对不对?哎,所以啊,万一咱们的流水线出了故障的话,那是不是就应该等待修好了才能用啊,所以啊,咱们线程也存在类似的状态,就意味着我们线程的运行啊,它必须是可运行状态才能运行,那么如果你是别的状态的话,它就不能运行啊,所以我们线程对象它必须为可运行状态,它才可以运行,那么其他状态它是无法运行的。
03:04
诶,老师呀,那这其他状态指的是什么状态呢?我们之前不说了吗?我们有六个状态,那么这里是12343个状态,那么其他的三个状态就没有办法运行了,那咱们一个一个来看,首先我们有个叫block的,这里面有个叫做waiting,下面还有个叫做time的waiting,咱们就画上来拷贝,画上以后这里写上它来,我们第一个叫blocked。然后呢,把这个呢拿过来,它我们称之为叫做主射。好了,我们的颜色呢,我变成一个我们的黄色吧,好,把这个复制,复制以后我们拿过来,这个叫做waiting,咱们叫做等待,好把这个呢,我们放过来,它称之为咱们叫做等待,对吧?好,再来我们这个地方呢,再来一个叫time的waiting,所以我们再复制一下,复制以后我们来写上它,咱们叫time的waiting啊好了,复制完成以后,这个是什么意思呢?很简单,叫定时等待啊,咱们叫定时等待,行了,我们有三个不同的状态,记住这三个状态是无法运行的,咱们为了区分一下,把颜色咱们变一变,给他个紫色吧,给他一个我们的这个蓝色,好,那么这三个状态都是从哪来的呢?都是从可运行状态来的,所以呢,我们把箭头呢,给它画上。
04:19
来我们箭头呢,咱们画一下啊画过来,然后呢,复制复制以后放到这边。好了,然后呢,再把这个呢,箭头给它挪过来就可以了,哦,诶老师呀,这个什么意思呢?为什么可运行可能到阻塞状态,也可能呢到等待状态,也可能到定时状态,那么这是什么情况呢?这里给大家解释一下啊,我们当前啊这个阻塞状态有点什么感觉呢?就好比啊咱们流水线除了故障一样,如果这个故障呢,它不解除的话,那么线程是无法恢复执行的,对不对?诶当然我这里说的这个故障啊,它只是一种类比,它并不是说我们的县城真的就出了故障了啊,而是只县城发生了一些特殊的事情,你必须把这个事情啊明确处理了之后才能恢复执行,是这个意思啊,别误会了,好,那么处于等待状态的线程呢,就有点感觉像什么呢?就是生产流水线的那个例行维护了。
05:15
那比如每周检修一次,这种感觉,你检修的时候啊,线程当然就不能运行了,对不对,那么你检修完了以后,你告诉我诶完成了,那咱们这个线程不就能自动恢复运行了吗。还有一种状态呢,是定时等待状态,那么这个状态就好比咱们电脑一样,你用的时间长了,太热了,运行变慢了怎么办?诶我们先把那个电脑关机一段时间对不对?你关机以后你再重新启动使用,诶就是这个感觉,诶用了一段时间,你这个性能变慢了,重新启动就可以了,对不对?好了,这个时候我们几个状态的一个大概含义啊,那么除了新建状态以外,我们其他几个状态呢,都是需要通过一些方法来完成它的转换的,那么源码中啊,对这个状态的变换呢,都提供了一些说明,大家可以看到我们的waiting就有什么wait呀,Join呀,什么park这样的东西,而我们的time的waiting呢,什么sleep呀,Wait呀,Join呀,哎,它都有不同的方法,可以让它的状态发生改变啊,最后的这个状态呀,其实我们也有方法,大家看一下我们的线程对象,除了启动以外,其实还有一个专门的方法,叫做T点儿,我们的stop方法,这个方法是真正的关闭线程的方法,只不过呢,因为我们。
06:28
这个run方法执行完毕之后,这个代码逻辑就没有了,所以这个线程会自动停止,所以这个方法现在已经不推荐使用了,所以啊,这个给大家介绍一下好了,我们现成的生命周期啊,我们就介绍到这里。
我来说两句