学习高并发编程2

学习高并发编程2

1.线程的父子关系
  每一个线程的创建都是由另一个线程的完成,创建线程的线程就是父线程。

2.Thread与ThreadGroup
  main函数所在的线程由JVM创建,也就是main线程,在main方法里创建的线程都是其子线程,main线程所在的Thread Group称为main,而其子线程如果未指定则默认和父线程为同一个ThreadGroup

3.Thread与JVM虚拟机栈
  JVM虚拟机内存大致可以分为5大部分。程序计数器,虚拟机栈,本地方法栈,堆内存,本地方法区。其中,程序计数器,虚拟机栈,本地方法栈属于线程私有;堆内存与本地方法区属于线程共享。
  由于JVM虚拟机内存大小是不变的,所以可以粗略的认为JVM内存 = 堆内存 + 线程数量 * 栈内存。堆内存不变,栈内存越大,创建线程的数量越少。由于栈内存是线程私有的,所以每个栈内存都会占有指定内存大小。同样,堆内存越大,线程数量也越少。

4.守护线程
  守护线程一般用于处理一些后台的工作,如垃圾回收线程。守护线程,专门用于服务其他的线程,如果其他的线程都执行完毕,连main线程也执行完毕,那么jvm就会退出。用代码解释:

public class DaemonThread {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            while (true) {
                try {
                    System.out.println("用户线程正在进行中");
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        //thread.setDaemon(true);
        thread.start();
        Thread.sleep(2_000L);
        System.out.println("主线程结束生命周期--------------");
    }
}

运行结果:

...
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
主线程结束生命周期--------------
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
...

根据结果显示,此时主线程(main线程)已经结束,但JVM虚拟机并没有结束,因为此时还有我们自己写的一个线程并没有结束,但如果将我们自己写的线程设为守护线程:

public class DaemonThread {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            while (true) {
                try {
                    System.out.println("用户线程正在进行中");
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread.setDaemon(true);
        thread.start();
        Thread.sleep(2_000L);
        System.out.println("主线程结束生命周期--------------");
    }
}

运行结果:

...
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
用户线程正在进行中
主线程结束生命周期--------------

Process finished with exit code 0

由于将我们自己的线程设为守护线程,所以当主线程结束,JVM虚拟机就会自动退出。

以上内容为个人学习总结心得,如有不妥欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值