zoukankan      html  css  js  c++  java
  • 08_控制线程_后台线程(守护线程)

    【后台线程】

    后台线程(Daemon Thread):运行在后台,他的任务是为其它的线程提供服务,又称为"守护线程"。JVM的垃圾回收线程就是典型的后台线程。

    [ 特征 ]

    如果所有的前台线程都死亡,后台线程会自动死亡。

    调用Thread对象的setDaemon(true)方法可以将指定的线程设置成后台线程。

    当整个虚拟机中只剩下后台线程时,程序就没有继续运行的必要了,所以虚拟机也就退出了。

    Thread类提供了一个isDaemon()方法,用来判断指定线程是否为后台线程。

    【示例代码】

    package com.Higgin.part02;
    
    class DaemonThread implements Runnable{
    
        //定义后台线程的形成执行体和普通线程无区别
        @Override
        public void run() {
            for(int i=0;i<1000;i++){
                System.out.println(Thread.currentThread().getName()+"===="+i);
            }
        }
        
    }
    
    public class Demo02 {
        public static void main(String[] args) {
            DaemonThread dt=new DaemonThread();
            Thread t1=new Thread(dt,"后台线程");
            t1.setDaemon(true);  //将此线程设置成后台线程!!
            t1.start();  //启动线程
            
            for(int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+"===="+i);
            }
            //main线程运行到for循环结束,就算此时后台线程的执行体for循环未结束 ,也得结束线程!
        }
    }

    【运行结果】

    后台线程本来希望运行到i=999的,但是前台唯一的main主线程运行结束了,JVM自动退出,后台线程也会随之结束。

    【小结】

    从上面的代码看,主线程默认是前台线程,t1线程设置为后台线程。

    【注意1】

    并不是所有的线程默认都是前台线程,

    前台线程创建的子线程默认是前台线程

    后台线程创建的子线程默认是后台线程

    【注意2】

    前台线程死亡后,JVN会通知后台线程死亡,但从它收到指令到做出相应,需要一定的时间,而且要将某个线程设置为后台线程,必须要在该线程启动之前(比如本案例中main()方法的for循环之前),即setDaemon(true)必须在start()方法之前调用,否则会引发IllegalThreadStateException异常。

  • 相关阅读:
    图解插入排序
    图解冒泡排序
    break 和continue的两种用法
    循环的使用选择
    jstl标签库使用报错index_jsp.java找不到问题
    [Android 除錯] Conflict with dependency
    jQueryMobile 網頁使用 ASP.NET Web API 服務
    Chart.js 與 ASP.NET MVC 整合應用
    HTML5 新增的 input 事件
    ASP.NET MVC 5 實作 GridView 分頁
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5903533.html
Copyright © 2011-2022 走看看