Java的Daemon线程

Daemon名字:守护线程,是运行于后台的线程。

jvm中如果只有daemon线程的之后,将会停止线程并退出jvm。

1、使用setDaemon将线程设置为守护线程。

2、需要在start方法调用之前使用。

3、主线程结束后,用户线程将会继续运行,如果没有用户线程,都是后台进程的话,那么jvm结束【daemon线程也结束】。

4、如果是一个Daemon线程,那么它创建的任何线程也会自动具备Daemon属性。

import java.io.IOException;

public class DaemonThreadTest extends Thread {

	public DaemonThreadTest() {
	}

	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) {
		DaemonThreadTest test = new DaemonThreadTest();
		// 如果不设置daemon,那么线程将输出100后才结束
		// 在test未结束前,执行下面的输入操作,则test终止执行,因为jvm中只剩下守护线程时会终止
		test.setDaemon(true);
		test.start();
		System.out.println("isDaemon = " + test.isDaemon());
		try {
			System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		System.out.print(Thread.currentThread().getName() + "结束");
	}
}


上面代码中,一旦用户输入内容敲击回车之后,daemon线程也会立即停止。

在java中,很多地方需要用到守护线程。比如说gc中,回收垃圾的线程就是守护线程。

你可能感兴趣的:(Java的Daemon线程)