您的位置:首页 > 编程语言 > Java开发

java多线程总结二:后台线程(守护线程)

2011-12-16 15:19 513 查看
声明: 这是转载的

原帖地址: http://blog.csdn.net/touch_2011/article/details/6891708

作者: Touch_2011

所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程。反过来说,只要有任何非后台线程(用户线程)还在运行,程序就不会终止。后台线程在不执行finally子句的情况下就会终止其run方法后台线程创建的子线程也是后台线程。

下面是一个后台线程的示例:

view
plain

<span style="font-size:16px;">package demo.thread;  

  

import java.util.concurrent.TimeUnit;  

  

public class DaemonDemo implements Runnable {  

    @Override  

    public void run() {  

        try {  

            while (true) {  

                Thread.sleep(1000);  

                System.out.println("#" + Thread.currentThread().getName());  

            }  

        } catch (InterruptedException e) {  

            e.printStackTrace();  

        } finally {// 后台线程不执行finally子句  

            System.out.println("finally ");  

        }  

    }  

  

    public static void main(String[] args) {  

        for (int i = 0; i < 10; i++) {  

            Thread daemon = new Thread(new DaemonDemo());  

            // 必须在start之前设置为后台线程  

            daemon.setDaemon(true);  

            daemon.start();  

        }  

        System.out.println("All daemons started");  

        try {  

            TimeUnit.MILLISECONDS.sleep(1000);  

        } catch (InterruptedException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

    }  

}  

</span>  

 

运行结果:

All daemons started

#Thread-2

#Thread-3

#Thread-1

#Thread-0

#Thread-9

#Thread-6

#Thread-8

#Thread-5

#Thread-7

#Thread-4

分析:从结果可以看出,十个子线程并没有无线循环的打印,而是在主线程(main())退出后,JVM强制关闭所有后台线程。而不会有任何希望出现的确认形式,如finally子句不执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 java string jvm