JAVA-初步认识-第十二章-主线程运行示例

一.

我们关注的重点在于主线程,我们一般不关注垃圾回收,因为这个动作是自动的,它是以什么方式来判断的呢?堆内存中一旦产生垃圾,它是不会立即去清理的,如果立即去清理的话会降低效率。因为垃圾回收在操作时,会和主线程抢夺cpu的控制权(获取cpu的执行权)。在某一时刻谁拿到执行权,谁就操作。接下来就是什么时候回收的呢?它会先判断堆内存的空间大小,如果满足一定的量就要进行释放了。不释放就装不进去了,怕溢出,就要做自动释放动作。

接下来用实例代码来体现,(体现什么?)

只考虑主线程部分,

这里DOS编译运行的结果都是主线程控制执行的。(说出这句话的理由什么?没有自定义线程?)

现在画一下多线程的图,(不在画堆了,直接对着栈研究),这里的内存图相较于以前的内存图有了很大的增强。(这复杂的过程一直存在,以前没有介绍)

并不是说没有堆内存的产生,而是我们现在的重点在栈内存上。

栈内存画好后,里面就有主线程(虚拟机启动的时候,告诉大家要执行这个类,是不是先要启动一条线程,它其实启动多条线程,其中有一条是负责主函数的),所以这条线程启动完了以后,就来了一个叫做main函数,(线程是在程序代码运行之前启动的,因为它要控制整个运行流程。)

其实这里面有条路径,(这玩意儿怎么画呢?)无所谓了,反正执行过程是一样的。当我们在main里面创建两个对象,注意构造函数我是不画(首先堆内存没画,里面的对象也没画。对象创建时的构造是要在栈内存中画的,现在也省略了。)当我们d调用show的时候,show就进栈了,show进栈还是依赖主线程,(有可能构造器进栈都是依赖主线程,有可能线程相当于控制器的作用?)

(对图解进行了修改,栈内存中不应该从上往下画执行路径,看着好像是从上往下执行,应该是程序代码从上往下执行)

首先是主线程先进栈(主线程为什么会有进栈的概念?),紧跟着show方法就进栈了。这就要执行show去了,show没执行完,能执行到主函数吗?是不可能的。

这个show一执行完就出栈了,出栈后,主函数继续执行。执行的是d2.show,这时show方法再次进栈,执行完以后,再次出栈。之后,有一个return,执行后主函数出栈了。这个时候,已经没有可执行内容了,主线程就结束了(貌似主线程对应的就是主函数里面的代码),主线程一结束,没有内容的情况下,虚拟机把这个进程就关闭了,(我们不说底层的内容,那是虚拟机自动掌管的)

现在我们有一个这样的担心,出现这样的问题该怎么解决呢?比如说,当我们的程序在向下运行的过程中,遇到了一个圈(如下图所示),话句话说,它是一个循环,它要循环好多次。一旦转起来,下面就无法执行了。这就意味着下面的代码运行不到,我们想要运行到。不想因为这个循环在这,耽误时间,怎么办?

这个时候,我们就有可能要单独搞一条执行路径。来负责这段内容的执行。

左边是主线程,右边是自己创建的线程,或者说自己定义的线程,那么有这个循环情况吗?现在演示的看一下,

(修改了程序,来演示一下)

整个DOS的结果是慢慢地往外蹦。

现在我的需求是什么样的呢?正因为有程序不断地在圈那儿停止,不断地去运行,而不往下走,导致我这程序比较慢。那么,我们就想说,能不能实现“旺财”和xiaoqiang同时执行呢?这就是我们的需求,

如何能实现“旺财”和xiaoqiang同时执行,是不是需要做一个动作,xiaoqiang在一个路径当中,旺财要执行的代码在另外一个代码当中,是不是就可以完成这个动作啦,cpu在两个路径上进行切换。该如何建立一条新的路径呢?

猜你喜欢

转载自blog.csdn.net/Fighting_Future/article/details/80256588