忽然在某段程序中看到了Thread.setDaemon的用法,经过学习以后了解:
1. setDaemon需要在start方法调用之前使用
2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程
3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)
4. 主线程结束后,
4.1 用户线程将会继续运行
4.2 如果没有用户线程,都是后台进程的话,那么jvm结束
sample:
- package a.b.c;
- import java.io.IOException;
- public class TestThread extends Thread {
- public TestThread() {
- }
- /** *//**
- * 线程的run方法,它将和其他线程同时运行
- */
- public void run(){
- for(int i = 1; i <= 100; i++){
- try{
- Thread.sleep(100);
- } catch (InterruptedException ex){
- ex.printStackTrace();
- }
- System.out.println(i);
- }
- }
- public static void main(String [] args){
- TestThread test = new TestThread();
- // 如果不设置daemon,那么线程将输出100后才结束
- test.setDaemon(true);
- test.start();
- System.out.println("isDaemon = " + test.isDaemon());
- try {
- System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }