00:00
大家好,我是海波老师,接下来我们来讲一讲Java语法中的线程,说到线程这个概念啊,理解起来还是很难的,因为无法从名称上直接联想到什么,那所以只能靠举例子来类比了,那如果举的例子呀它不准确,那么学习起来难度就会非常的大,而且呢,线程语法比之前学习的语法在使用上也确实更加复杂一些,所以想要学习这样的语法,就一定要站在Java语言开发作者的角度想一想,作者是为了解决什么样的问题才设计了这样的语法,那么当你想明白了,理解了作者的用意之后呢,我们很多的语法细节才能理解明白,那么这样的话,学习和记忆起来就会比较轻松,否则呀,你就会发现知识点很散,很难记啊,所以呢,咱们讲解线程这个概念之前呢,咱们首先需要先说一下进程的概念。进程在英文中啊,我们叫process,表示正在运行的程序,那么需要注意啊,我这里说的是运行而不是执行,那有什么区别呢?诶,之前讲过,咱们编排的程序指令最终是要CPU中央处理器读取后,由它的内部核心处理器来执行的,那么这个内部核心处理器啊,我们简称为CPU的内核,如果CPU只有一个内核的话,那么就意味着它同时只能执行一个程序指令,这就是所谓的单核CPU。
01:17
如果有多个内核的话,那么就可以同时执行多个程序指令,也就是所谓的多核CPU。那么现在啊,比较常见的用于开发软件程序的笔记本电脑一般都是四核或八核CPU,也就是说我们可以同时执行四个或八个程序代码,所以所谓的进程表示的就是运行的程序,而这个程序能不能执行呢?就取决于程序能不能抢占CPU内核的执行权了。那么也就是说呀,软件进程我可以启动很多,但是只有抢到了CPU内核的执行权才可以真正的执行,这就是为什么有时候咱们启动软件时会发现需要等待半天,或者提示无法响应的原因,这有点类似于咱们玩的那个抢椅子的游戏,基本的游戏规则就是假设啊有五个人,那么大家围绕着四个椅子来转圈儿,那么这五个人呢,都是在移动当中,那么裁判呢,一声令下抢,然后五个人就去抢着四把椅子,那么椅子少一个呀,那肯定会有一个人抢不到,对。
02:17
啊,那没抢到的人就会被淘汰,抢到椅子的人呢?继续下一轮游戏,下一轮的椅子呀,就变成了三个,也就是说我们四个人就该抢三把椅子了,那么以此类推,抢到最后那把椅子的人呢?就是这局游戏的胜利者,对吗?这个游戏啊,我相信大家都玩过,即使没玩过,是不是也看别人玩过呀,那么这里抢到椅子呀就可以继续玩,那没抢到的呢?是不是就得等着了?哎,玩下一局了,类比一下。把椅子呢,咱们当成CPU的内核,玩游戏的人呢,当成运行的进程,那么你抢到了椅子,就等同于你对应的进程抢到了CPU的内核执行权,那么他就可以继续执行,那如果没抢到呢,那么就需要等待了,对吗?诶,这个应该能明白吧,老师,那如果我一次都没有抢到怎么办?那我只能说这就是命了,对吧?好了,进程有一个大概的了解后,咱们现在说一下Java程序的运行啊,我们编写完代码之后啊,我们运行Java的程序一般就是点击我们idea这边的什么绿色箭头对不对?哎,咱们就是点它,那么这种情况下我们会把结果呢,展示在咱们控制台上,其实下我们这种操作呢,是很难理解Java程序当中的一个完整执行过程的,所以接下来呢,我们不用idea软件,我们来给大家演示一下Java代码的编写、编译和执行的过程,来,我们点击这里,我们选择打开啊,点开。
03:39
点开以后呢,我们就在这个位置啊,我们打开啊,我们在这个里面给大家创建一个Java的程序,我们点击右键啊,选择新建,然后选择文本文档,写上一个叫hello啊,咱们把这个改成叫Java,这就是一个我们的加码的源码文件,对吧?然后呢,我们打开,打开就用文本编辑器就可以了,打开之后我们这里呢,就跟idea不一样了,因为idea啊,它是有提示功能的,咱们这就没有了,对吧?没有的话,这个代码呢,就需要自己手动一个一个写了,所以呢,我们写上它啊来写上。
04:11
我们叫public,然后呢,我们叫class,我们就叫hello,我们的这个class的类名应该跟这个源码文件的名称保持一致,好了,我们写上一个花括号,那么里面呢,我们就写上叫public啊,然后static,然后word man括号,在这里给它写个花括号包起来,后面我们来写上它叫字串,给它一个中括号,咱们叫数组,叫A,诶好了,写完以后呢,很简单,我们在这里呢,就直接写上system,咱们叫做点O啊,Print咱们打印行了,写完之后我就写上个hello就可以了,好写个分号结尾,那么这样的话,我的代码就算是完成了,那么完成以后呢,我们接下来就需要把它编译一下,那咱们该如何编译呢?诶,咱们这样,咱们在我们这边呀,有一个我们的地址栏,我在这边写上一个CMD啊,打开一个命令行的黑窗口,那么这个时候呢,我们需要使用一个指令叫Java c指令,这个Java c指令啊,就是用于将Java源码文件翻译成Java虚拟机可以。
05:11
执行的自解码文件啊,这个翻译的过程呢,我们就称之为叫编译,所以呢,这个Java c的指令呢,我们有的时候也就称之为叫编译指令,有的时候也称之为叫编译器,对吧?那好了,Java c后面就跟着我们的源码文件的名称叫hello.java。好了,那么我们回车执行啊,你会发现我们现在已经结束了,那么在我们当前的文件目录当中就会多出来一个叫hello.class文件,这个自解码文件中就存储着我们源码中编译后的所有信息,甚至更多。那好了,字解码文件我们已经有了,那么咱们接下来该干嘛了呢?诶,我们的编写和编译的过程已经结束了,接下来我们开始要执行了,那怎么执行呢?我们需要在这个黑窗口当中继续,我们写上叫Java,然后呢,我们写上一个hello,这个hello呢,就是我们刚才的那个class的名称,这里的Java指令啊,就表示启动Java虚拟机,那么Java虚拟机其实是一个系统进程,这个进程运行时就会读取咱们这个嗨的自解码文件,一旦他抢到了CPU的执行权,就会以hello自解码中的那个问方法来咱们看一下。
06:19
就会以这个main方法为入口来执行咱们的逻辑,咱们的程序就运行起来了,所以啊,咱们的代码呢,和Java虚拟机合在一起,就是一个软件系统,那么默认情况下,一旦这个main方法它执行完毕以后,那么软件系统就会退出,也就是关闭了,好,咱们执行一下。咱们这里回车,回车以后大家观察一下是不是打印了一个hello之后,我们的这个程序就结束了,大家观察一下我们的逻辑就是打印一个hello啊非常的简单,对不对,诶就是这样,所以啊这种方式就把我们的程序就执行完了,诶我们刚才也就演示了一下我们整个的一个编写编译和执行的过程,不过呀,这里有一个问题,就是执行的太快了。
07:02
你执行的太快了以后,你看不到执行的过程,也就看不到所谓的那个软件进程了,对不对,那该怎么办?所以啊,我们这里呢,把这个代码呀,咱们稍微的改善一下,咱们增加一个循环,让它能够长时间的运行,所以呢,我们这里这样,我们在这个地方呢,我写上一个while,然后写个括号,括号以后呢,我在这里呢,给它一个true。什么意思?我们有条件的循环while,然后呢,我加个true,这个条件永远为true,那么这个逻辑代码就会一直执行,他把这个代码呢,咱们拷贝进去,诶,它就会不断的去打印hello吧,诶这就是我们想做的,那我为什么要这么做,我就是想看看这个程序一直在执行会出现什么效果,那我们现在呢,就准备重新的编译,为什么?因为我们的源代码变了嘛,咱们得重新给它编译,所以Java c hello.java回车,回车以后,那么它现在就会产生一个新的class文件,所以这个文件会刚刚重新编译成功了,那咱们现在就执行一下,那怎么执行呢?咱们的Java还是那个hello,记住了,同学们,我现在如果执行的话,它是个死循环,我们这个程序会一直在跑,它不会跳出的,所以回车。
08:13
回车以后你看,Hello,一直在打印吧,没关系,咱们等一等来放开,放开以后我要验证一下,我们当前的软件程序就是个进程,所以我们写上CMD来回车,回车以后咱们用一个指令,这个指令叫GPS。它表示什么意思呢?它是我们Java所提供的一个指令,可以展示出我们当前Java的进程,所以我回车,回车以后大家有没有发现这边有个叫hello的,这个hello就是刚才我们在执行的那个程序,诶,它就是一个进程,你看我们现在不就看到了吗?那如果咱们现在看到的话,诶,老师呀,那如果当前的进程我要关掉呢?来把这个进程关掉,如果你把它关掉的情况下,那么这时候你再来看一下,咱们叫GPS回车,你看还有那个嗨吗?没了,为什么?因为那个进程被关掉了,对不对,就是这个道理啊好了啊,这个我们的进程就演示到这里了,咱们总结一下,咱们自己写的程序,一旦运行,它就会启动一个进程,而那个进程的名字呢,就是我们运行时的那个类的名字。
我来说两句