一、主线程
由main方法由main方法生成的线程叫主线程,所以任意一个java程序 都有至少一个线程
1.是产生其他子线程的线程;
2.通常它必须最后完成执行比如执行各种关闭动作。
二、子线程
被Thread包含的“方法体”或者“委托”均为子线程。委托可以包含多个方法体
三、精灵线程/守护线程
main方法是主线程,当子线程不是精灵线程时,主方法结束,但是子线程没有结束,主线程结束与否不影响子线程的结果;但是当子线程是精灵线程时,主线程结束,子线程也会结束
static class Task implements Runnable{
@Override
public void run() {
for(int i=0;i<=20;i++) {
Thread1 t = new Thread1(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.run();
}
}
}
public static void main(String[] args) {
Task t = new Task();
Thread t1 = new Thread(t);
//t1.setDaemon(true);加入这一句就将子线程设置为精灵线程
t1.start();
System.out.println("线程..."+t1.getName()+"是精灵线程嘛?"+t1.isDaemon());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程结束....");
}
}
//当不设置精灵线程结果:
线程...Thread-0是精灵线程嘛?false
我的年龄是:0
我的年龄是:1
我的年龄是:2
我的年龄是:3
我的年龄是:4
我的年龄是:5
我的年龄是:6
我的年龄是:7
主线程结束....
我的年龄是:8
我的年龄是:9
我的年龄是:10
我的年龄是:11
我的年龄是:12
我的年龄是:13
我的年龄是:14
我的年龄是:15
我的年龄是:16
我的年龄是:17
我的年龄是:18
我的年龄是:19
我的年龄是:20
//当设置精灵线程时的结果:
线程...Thread-0是精灵线程嘛?true
我的年龄是:0
我的年龄是:1
我的年龄是:2
我的年龄是:3
我的年龄是:4
我的年龄是:5
我的年龄是:6
我的年龄是:7
我的年龄是:8
主线程结束....
四、线程的属性
自己创建的线程的id是初始值是0,前缀递增的, 所以第一个线程是 1 但是,jvm会在程序运行时给我们运行些线程,所以有时我们输出线程的id有时不是连续的