- 创建线程对象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();
}
}
总结:构造thread的时候传入stacksize代表着该线程占用的stack大小,如果没有指定stacksize的大小,默认是0,0代表着忽略该参数。