Java程序 启动默认自带两个线程:

  1. ** 1. 主线程(main线程)**<br />** 2.GC垃圾回收器线程**![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655953459742-4261bc98-e009-4056-a009-df442abeddb0.png#clientId=u08f133d0-8e1d-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=421&id=ubef255b5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=526&originWidth=1206&originalType=binary&ratio=1&rotation=0&showTitle=false&size=17007&status=done&style=none&taskId=u151649d4-79ed-4506-804b-c11efd29047&title=&width=964.8)

实现线程的2种方式:多线程两种方式的图解比较及区别.bmp

线程的生命周期:线程生命周期图解.bmp

我们自己开启的就是子线程
如何开启自己的子线程:
1. 找一个类 继承Tread
2.覆写run方法
3.在run方法里面编写代码
4.在main方法中 new Thread子类 调用start方法 启动线程
线程是有随机性的image.png
从构造方法可以看到 构造器可以传入线程的name 因此可以给线程命名 但不是真正的名字 真正的 名字是getName();image.pngimage.png
方法:
image.pngimage.pngimage.pngimage.png

线程的run方法 一般要编写 长循环或者耗时操作
/MyThread m=new MyThread();
m.start();
int num=3;
while(num>1){
System.out.println(“一大波僵尸要来了!!!”);
}
System.out.println(“僵尸大军褪去了”);
for(int i=0;i<10;i++){
// 让当前睡眠指定毫秒数的代码
Thread.sleep(1000);
System.out.println(“当前循环:”+i);
}
上面死循环的代码不能写到 主线程里面 因为会导致 主线程卡死
后续代码无法执行
MyThread m=new MyThread();
// m.run(); 直接调用run方法不是开启线程 而是普通的方法调用 还依然只有一个主线程按顺序执行
// System.out.println(“我是主线程后续的代码”);
m.start(); 开始进程 会异步开启进程