多线程学习笔记四-jvm结构(stackSize的大小)

  • 创建线程对象thread,默认有一个线程名,以Thread-开头,从0开始技术 Thread-0 Thread-1 Thread-2
  • .如果在构造thread的时候没有传递runnable或者没有重写thread的run方法,该thread将不会调用任何东西,如果传递了runnable接口的实例,或者重写了thread的run方法,则会执行该方法的逻辑单元
  • 如果构造线程对象未传入ThreadGroup,Thread会默认获取父线程的ThreadGroup作为该线程的ThreadGroup,此时子线程和父线程将会在同一个ThreadGrouop

jvm结构
方法区(共享的区域,类加载的信息,常量,变量,静态变量,属于线程栈的一部分)
本地方法区(natvie方法)
程序计数器(指令交给cpu运行)
虚拟机栈(每个线程私有)栈帧
每个线程都有自己的虚拟机栈,main线程也有
栈帧:局部变量表
操作栈
动态连接 方法入口的地址。出口的地址
方法出口

可以在构造thread线程的时候设置stacksize的大小(1<<24)

public class CreateThread4 {
     
    private static int count;
    public static void main(String[] args) {
     
        Thread thread = new Thread(null, new Runnable() {
     
            @Override
            public void run() {
     
                try {
     
                    add(0);
                } catch (Error e) {
     
                    e.printStackTrace();
                    System.out.println(count);
                }
            }
            private void add(int i){
     
                ++count;
                add(i+1);
            }
        },"test",1<<23);
        thread.start();
    }
}

多线程学习笔记四-jvm结构(stackSize的大小)_第1张图片

总结:构造thread的时候传入stacksize代表着该线程占用的stack大小,如果没有指定stacksize的大小,默认是0,0代表着忽略该参数。

你可能感兴趣的:(多线程,java)