多线程基础-守护线程与非守护线程

1、线程分类:

  守护线程  非守护线程

2、程序线程:

 主线程   用户线程  gc线程
 **主线程:**一种特殊的非守护线程,但是并不能被设置为守护线程。如果强制设置为守护进行会出现以下Exception

在这里插入图片描述 **用户线程:**在主线程中创建的线程。该创建的线程可以被设置为守护线程或者非守护线程
**GC线程:**守护线程

3、主线程与非守护线程

 package com.shebao.thread;
/**
 *  @author: zhaoyihang
 *  @Date: 2020/9/11 8:49 上午
 *  @Description:  守护与非守护线程
 */
public class ThreadDemo6 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i < 10;i++){
                    try{
                        Thread.sleep(300);
                    }catch (Exception e){
                        Thread.currentThread().interrupt();
                    }
                    System.out.println(Thread.currentThread().getName()+":"+i);
                }
            }
        });
        t1.setName("非守护线程");
        t1.start();
       for(int i = 1;i<=5;i++){
           try{
               System.out.println(Thread.currentThread().getName()+":"+i);
               Thread.sleep(100);
           }catch (Exception e){
               Thread.currentThread().interrupt();
           }
       }
        System.out.println("主线程执行完毕");
    }
}

在这里插入图片描述总结:主线程结束非守护线程仍然可以继续运行

4、主线程与守护线程

package com.shebao.thread;
/**
 *  @author: zhaoyihang
 *  @Date: 2020/9/11 8:49 上午
 *  @Description:  守护与非守护线程
 */
public class ThreadDemo6 {
    public static void main(String[] args) {
       Thread t2 =  new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i < 10;i++){
                    try{
                        Thread.sleep(300);
                    }catch (Exception e){
                        Thread.currentThread().interrupt();
                    }
                    System.out.println(Thread.currentThread().getName()+":"+i);
 
                }
            }
        });
        t2.setName("守护线程");
        t2.setDaemon(true);
        t2.start();
       for(int i = 1;i<=5;i++){
           try{
               System.out.println(Thread.currentThread().getName()+":"+i);
               Thread.sleep(100);
           }catch (Exception e){
               Thread.currentThread().interrupt();
           }
       }
        System.out.println("主线程执行完毕");
    }
}

在这里插入图片描述总结:主线程结束,守护线程也立即结束(稍等,这句话稍微有点漏洞后面在进行解析)

5、主线程、守护线程、非守护线程

package com.shebao.thread;
/**
 *  @author: zhaoyihang
 *  @Date: 2020/9/11 8:49 上午
 *  @Description:  守护与非守护线程
 */
public class ThreadDemo6 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i < 10;i++){
                    try{
                        Thread.sleep(300);
                    }catch (Exception e){
                        Thread.currentThread().interrupt();
                    }
                    System.out.println(Thread.currentThread().getName()+":"+i);
                }
            }
        });
        t1.setName("非守护线程");
        t1.start();
       Thread t2 =  new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1; i < 10;i++){
                    try{
                        Thread.sleep(300);
                    }catch (Exception e){
                        Thread.currentThread().interrupt();
                    }
                    System.out.println(Thread.currentThread().getName()+":"+i);
 
                }
            }
        });
        t2.setName("守护线程");
        t2.setDaemon(true);
        t2.start();
       for(int i = 1;i<=5;i++){
           try{
               System.out.println(Thread.currentThread().getName()+":"+i);
               Thread.sleep(100);
           }catch (Exception e){
               Thread.currentThread().interrupt();
           }
       }
        System.out.println("主线程执行完毕");
    }
}

在这里插入图片描述 从上述可以看出,main线程结束守护线程并没有结束,给上述总结存在相驳。

6、 java虚拟机是如何退出的?

如果虚拟机中剩下的都是守护线程,那么JAVA虚拟机不会管守护线程都会退出。如果线程中还有存活的非守护线程,虚拟机就会等待非守护线程执行结束,在等待的过程中守护线程也可以抢占CPU执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值