本文将通过一个简单的实例来讲解Java多线程的执行流程及其在内存中的表现。
1 代码
自定义线程类:
public class MyThread extends Thread {
// 利用继承特点,将线程名称传递给父类
public MyThread(String name) {
super(name);
}
// 重写run方法,定义线程要执行的代码
public void run() {
for(int i=0; i<20; i++) {
//getName()方法来自父类,获得父类存储的名称
System.out.println(getName()+i);
}
}
}
测试类:
public class Demo {
public static void main(String[] args) {
System.out.println("这里是main线程");
MyThread mt = new MyThread("小强");
mt.start();
for(int i=0;i<20;i++) {
System.out.println("旺财:"+i);
}
}
}
运行结果:
这里是main线程
旺财:0
旺财:1
旺财:2
小强0
小强1
...
2 执行流程图
- 程序启动运行main时,Java虚拟机启动一个进程;
- 主线程main在main()调用时被创建;
- 随着调用mt对象的start()方法,另外一个新线程也启动了;
- 如此,整个程序就在多线程下运行了。
3 内存表现
多线程执行时,每一个执行线程都拥有自己的内存栈,用来存放局部变量和返回值,以及进行方法的压栈和弹栈。所有的线程共享一个内存堆(heap)。