zoukankan      html  css  js  c++  java
  • 线程运行的内存图

    话不多说,看以下两部分代码

    public class ThreadTest {
        
        public static void main(String[] args) {
            //创建并开启线程
            new MyThread().start();
            //循环遍历
            for(int i=0;i<100;i++) {
                System.out.println("main"+ i );
            }
            
        }
    }
    public class MyThread extends Thread{
    
        public void run() {
            //遍历0-99
            for(int i=0;i<100;i++) {
                System.out.println(this.getName() + i);
            }
            
        }
        
    }

      >接着我们运行main方法,控制台打印一部分结果如下:

       现在我们可以得出一些结论:

        1.main主线程在执行start()方法时会开启一条新的线程,而这条线程专门来运行run方法,不会去执行main里的代码块

        2.main主线程执行start()后不需要等待开启的线程执行完run(),会一直往下执行

        3.线程间的执行任务是互不干扰的

    那这个过程中,线程的内存图是怎么样的呢?如图:

       当执行start后,run不会进入main所在的栈内存的,因为这样会导致一个问题,先进去的方法是后出来的,所以会存在先执行run,后执行run后面的main代码,这样就不是多线程同时执行了。

      而看到这个图,可以发现每当开启一条线程,在JVM内存中,会单独为每条线程开辟一块栈内存用于使用

  • 相关阅读:
    Python 一条语句如何在多行显示的问题
    代理模式
    MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
    异步加载 Echarts图的数据
    Web页面中两个listbox的option的转移
    半透明效果
    在地图上使图片透明
    加载图片方式
    获取鼠标坐标
    画笔与画刷
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13729869.html
Copyright © 2011-2022 走看看