一、主线程

由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
主线程结束....

四、线程的属性

java子线程获取父线程内容 java 子线程_java子线程获取父线程内容

 自己创建的线程的id是初始值是0,前缀递增的, 所以第一个线程是 1  但是,jvm会在程序运行时给我们运行些线程,所以有时我们输出线程的id有时不是连续的