00:00
好了同学们,那咱们接下来接着看那个这块的东西好吧。呃,是这样,我们先把上午呢说的这个线这块我们再来回顾一下,那么上午这块呢,首先我们是说了什么是进程,什么是线程,线程和进程之间的一个关系,对不对。哎,说了一下这个,然后呢,就理解理解对不对,什么是线程,我们为什么要用多线程啊。为了提高处理速度是吧,哎处理效率,所以这块的话咱们再来看看吧,什么是进程,各位啊,这个进程啊,说的就是一个软件或者是一个应用程序。这就是一个进程。在一个进程当中啊,是可以启动多个线程的。就像我们这个,在打开这个DOS命令窗口之后,我们在这输入一个Java hello word,实际上这个是会启动Java虚拟机。
01:00
那么大家要注意启动Java虚拟机,Java虚拟机这个东西。是一个进程啊,是一个进程,这个进程呢,它可以启动多个线程,那么线程是什么呢?线程实际上是进程当中的一个执行单元。你就这样去理解就行了,执行单元就线程是一个进程当中的执行单元。一个进程是可以启动多个线程的。那么我们在这里呢,启动Java虚拟机之后,这个Java虚拟机会去调用这个类的闷方法,那么大家要注意啊,闷方法它所对应的实际上是一个主线程。它其实除了这个启动Java虚拟机,Java虚拟机除了启动一个主线程去执行这个程序之外,还启动了一个线程叫做什么呀,垃圾回收线程。垃圾回收线程各位啊,会回收这个我们Java程序的这个垃圾。啊,那么在这里呢,我为了描述清楚这个进程和线程之间的一个关系呢,我就举了这样一个例子,比如说阿里巴巴和京东,他们就属于两个进程,对吧?进程你要记住它是两个不同的软件,或者是两个不同的公司,它的资源是不会共享的。
02:17
所以你要知道,魔兽游戏是魔兽游戏。酷狗音乐盒是一个酷狗音乐盒,这是两个不同的进程,魔兽游戏呢,它有自己的内存。酷狗音乐呢,它有自己的内存,它的音乐不会跑到魔兽里面,魔兽也不会跑到什么呀,我们的音乐当中,所以他们的内存是独立的,不共享,这是对于进程来说,但对于线程来说,大家注意这个进程下面有多个员工,或者公司下有多个员工,每一个员工就是一个线程。那么我们阿里巴巴是支持多线程并发的,什么意思?阿里巴巴有多个员工,马云呢,他负责什么呀?诶决策公司的决策,那童文红呢,他负责什么呢?哎,他负责前台接待对不对?哎前台接待那么就是这样的一个一个各司其职的一个这样的一个情况,但是由于马云和童文红都在同一个公司,阿里巴巴。
03:11
啊,所以呢,我们认为马云和童文红的资源是可以共享的。那么在我们Java程序当中,要记住线程和线程的堆内存和方法,去内存共享,但占内存独立。占内存独立一个县城是一个站。线程A和线程B它的占内存是独立的,这个你需要背会,各位先记住。一个县城一个站,100个县城100个站空间。那么这个线程和线程之间的是互不干扰的,各自执行的,这就是多线程并发,那么多线程并发其实就是为了提高我们程序的执行效率。火车站可以看作是一个进程,火车站中每个窗口可以看作是什么呀?每一个售票窗口可以看作是一个县城。对吧,你在我在窗口一购票,你在窗口二购票,你不需要等我,我也不需要等你,所以多线程并发可以提高效率,就是这样。
04:05
那么我们这块呢,再次呢,在这里给大家强调一下,我不知道大家这个能不能记住它啊,我们打开一个画板。那在Java虚拟机当中有一个东西啊,我们叫做什么呀,方法区。这个方法区永远记住啊,它是一块儿方法区一块儿啊,方法区一块儿叫做方法区。只有一块。然后呢,它还有一个空间叫什么叫堆。明白吧,堆这个东西啊,它也是怎么着啊,哎,只有一块啊,只有一块。对于多线程来说,这两个空间是共享的。明白吧,哎,多线程共享。共享这个对内存以及什么呀,我们的方法去内存。那么对于站就不一样了,各位,这是一个站。对吧,哎,这个可能是一个主占空间。
05:01
主线程对应的什么呀,主站。啊主站,那么这个主站呢,它最先调的方法,或者主线程最先调的方法,那当然是闷方法了,所以闷方法呢,会在站的底部。明白吗?哎,这是一个方法。那么闷方法会去调别的方法呀。对不对,哎,会去调别的方法,这个可能是M1方法喽。对吧,哎,那可能M1又去,第二天还掉了一个M2。对吧,哎,就是这样一个情况,那么M1M2和闷方法是不是都在一个线程当中啊,对吧?哎,就是这块呢,你要注意就是我们的这个这是一个。县城。站啊,这是一个县城,各位。一个线程,可能线程呢,是一个闷线程,线程闷。那么main方法调M1 M1可能就要调M2M men m1m2都在一个线程当中,大家注意啊,大家注意这个来,我这在这写上men对吧,哎,M1M2。
06:13
三个方法。在一个县城中啊,它是在一个县城里面的。那有可能我们在这个程序的执行过程当中,你比如说在这个执行这个M1方法执行过程当中,在这里呢,有一段代码,这段代码怎么着啊,它启动一个线程。那有可能程序到这儿之后怎么着,它启动一个线程,那启动线程呢,就相当于要在这儿会分配一个新的占空间。分配一个新的占空间,哎,这个是我们叫做分支站。啊,分支分支线程啊分站。或叫之战,主战之战啊。叫做之战。分支线程。
07:02
分支。那这个分支线上可能叫。啊,那么T1这块呢,他也会去调我们的这个方法,明白吧?啊,也会去压战,也会去谈战啊,也会去压战,也会去谈战。那这个呢,可能是X方法。啊,这个呢,可能是Y方法对不对,这个呢,可能是Z方法。对吧,XYZ3个方法在同一个线程当中,XYZ3个方法。在同一个线程。种啊是这样的一个情况。那么如果你这个占空了,有可能我这个T1线程还在执行,所以main方法结束不代表程序结束啊,Main方法结束,Main方法结束只代表什么,只代表主线程结束了。啊,其他线程可能还在执行,其他线程可能还在执行。
08:00
那大家注意这个就占的空间是是什么呀?是这个叫独立的一个县城一个站,各位啊,站不止有一个了啊,是一个县城一个站来保存一下,那这边呢,是D31。我们叫做什么叫做,哎,一个县城一个站。啊,一个县城一个站。32应该是啊,第三十二天了。来保存一下,保存一下啊,好了,这个理解一下各位啊,理解一下,好,这是我们所说的这个内存共享以及内存独立啊,来这再写上吧,占内存独立啊。线程和线程,线程A和线程B占内存独立。不共享。不共享啊。但堆内存和方法去内存是共享的,对于多线程来说啊,要注意这个。嗯。
我来说两句