00:00
大家好,我是海波老师,我们继续来讲Java语法中的线程,之前的视频中啊,我们提到了,我们可以将工厂看成是进程,那么将每条零配件生产的流水线呢看成是县城,那么一个工厂呢,最少也应该有一条流水线,所以咱们的进程中最少应该有一个线程,对不对?诶,不过大家都明白啊,如果所有的零配件都只能通过一个流水线进行作业的话,那么效率是不是太低了,且要根据零配件的不同呢,不断的切换流水线的作业工序,那么这样的话无形中又增加了我们的复杂度。所以如果能多几条流水线,那肯定是最好的,对吗?哎,我们的代码也是一样的,在某些情况下,如果能多创建几个线程来执行程序,那么效率不就提高了吗?而且啊,我们可以将某些逻辑隔离开,降低逻辑之间处理的难度,这不挺好的吗?哎,所以接下来咱们就来演示一下线程的创建和使用,那么在Java当中啊,我们创建线程呢,是通过指定的类来构建的,咱们来写上它啊,来突出咱们叫创建线程,我们创建的线程啊,它的类的名字就叫thread,这就是我们前面提到过的叫线程类,所以呢,我们写上它叫thread,我们写上一个T等于new,我们叫thad,诶,我们这么写就可以了,这个thad呢,是我们Java点浪包里面的类,所以我们这里无需导入,咱们直接扭出对象就可以了,现成的对象呢,咱们已经创建好了,但是这里啊,它仅仅表示那个流水线啊,已经准备好了,此时还不能开始生产,为什么呢?因为流水线还没开始启动呢,所以啊,我们这里还。
01:31
还要继续调用我们线程对象的方法,来,咱们写上它。我们叫启动线程,这个线程怎么启动呢?很简单,我的T点,我们的start,这个start呢,就是启动的意思,好了,我们现在呢,来执行一下运行,运行以后啊,你会发现我们在当前的控制台上只有一个闷,廖老师这啥意思呀,你不是创建了一个线程对象,并启动了这个线程对象,就好比咱们那个流水线已经开始工作了吗?那么怎么在控制台上只有一个闷呢?那是因为呢,你只是搭建了一个流水线,但是这个流水线啊,具体要做什么,你并没有告诉他,所以这里还要编排指定代码来告诉流水线他应该做什么,你要明白啊,既然是流水线,它都是自动化的作业,所以必须按照指定的规则和固定的作业流程才可以,所以咱们编写线程代码呢,也是这样,也需要这样的一个固定的流程,所以这个代码呢,其实是不行的,为什么呢?因为他什么都没有嘛,所以我们把这个呢给它做掉。
02:33
做掉以后,我们需要构建自己的一个线程的类,所以咱们写上它突do,咱们叫声明啊,自定义我们的程类,所以呢,我们写上一个class,咱们叫MYTH,好,那你说我自己随便写个类,它就能叫线程了吗?不可能,对不对,为什么呢?你需要遵循指定的规则和固定的作业流程,对不对?那么这里体现的就是继承一个类,咱们叫thread,你去继承这个类就可以了,哎,那么你记成这个类以后,我还是不知道我该怎么去实现功能啊,诶,这个时候你就需要重写它的指令了,所以呢,我这里写上它来样重写我们的指令,什么指令啊,运行指令,诶,咱们叫运行指令,所以我们这里呢,用快捷键,咱们叫ctrl o,诶里面会有很多的方法,其中就有一个叫wrong方法,诶这个wrong就是运行的意思,所以咱们点击OK,你点击完成以后,我们这个地方的wrong方法,它就可以开始运行,所以把这个去掉。
03:34
去掉以后呢,我们把这个代码咱们原封不动拿过来拷贝,拷贝之后大家看一下我们的这个代码呢,就是打印当前的现成的名称,为了准确起见呢,我们写上它,诶我们叫做什么呢?咱们叫做my thread my thread,诶OK,写上一个冒号,行了,同学们,我现在呢,有两个地方来打印现成的名称了,一个是在当前的问方法当中,一个是在我们自己写的类当中,好,那我现在呢,准备把咱们自己的线程类我创建一下,咱们写上它叫做T,啊,等于new,我们怎么写就可以了,好了,我现在呢,已经把这个写完了,那写完了以后,我们运行一下,看看我们的结果是什么样子的,我们运行。
04:18
运行以后大家会发现,诶,我们这里是不是会打印两个名称,说明我们当前的程序代码中确实有两个线程了吧?诶我们的它就是一个,还有一个就是我们的主线程对吗?哎,老师啊,这个我倒觉得没有什么太大的问题,那为什么你的这个线程的名字是在咱们后面打印的呢?诶哦,这个咱们一想也大概能明白,为什么呢?因为你是在这儿打印的,这个主线程的名称,你是在这儿启动的,那你后打印的,那可不就在后面吗?我们现在调整一下,同学们,我现在呢,把这个呢,我调整一下,我把它放到咱们的后面去。
05:00
我把它放到后面去以后,那么这个线程先启动执行,这个线程它后执行,那不就意味着我们这个应该先打印吗?对不对,好,那么现在呢,再来试一试好了啊来。运行,运行以后大家看结果,诶老师不对呀,怎么打印的结果还是闷在前面,我们的这个线程在后面呢,那么这个是因为什么呢?哎,其实很简单,因为啊,咱们创建一个新的线程,这就好比创建了一条新的流水线一样,所以它和咱们的main方法的主线程就变成了两条互不干扰的生产流水线,你打印你的名称,我打印我的名称,我们之间没有必然的什么先后关系吧,所以谁先打印谁后打印其实是无法确定的,它都有可能,诶既然你说他不确定,那为什么是main方法先打印呢?那么就是因为啊,新的流水线它也需要准备工作呀,比方说设备调试啊,给齿轮呢涂一些润滑机油什么的,对不对,所以呢,这些呢,都是需要诶耽误一些时间的对吗?所以呢,并不是说我一启动它马上就开始运行了,它会有一个时间差呀,对不对,诶所以啊,我们会稍微的慢一些,而我们这个main线程呢,它就一直在执行,它并没有。
06:14
停下来对不对,所以他不需要做任何的准备,对,他就会先打印出来,其实就是这个意思啊,那么好,我们第一个自己的线程就先讲到这里。
我来说两句