java的守护线程会在全部非守护线程执行结束后,自动结束。声明一个线程为守护线程,只需要调用Thread类的setDaemon(boolean )方法,令它的daemon字段值为true即可。

样例代码:

import java.util.*;
public class DaemonThread{
	public static void main(String[] args){
		new KTVRoom("No1", 3000).start();
		new KTVRoom("No2", 5000).start();
		new KTVRoom("No3", 2000).start();
		new WaiterDaemon().start();
	}
}
class KTVRoom extends Thread{
	private String roomNo;
	private int time;
	public KTVRoom(String roomNo, int time){
		this.roomNo = roomNo;//房间名
		this.time = time;//花费时间
	}
	public void run(){
		System.out.printf("%s is using!\r\n", roomNo);
		try{
			Thread.sleep(time);
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		System.out.printf("%s is billing,it takes %d ms\r\n", roomNo, time);
	}
	
}
class WaiterDaemon extends Thread{//这是一个持续报时的线程
	public WaiterDaemon(){
		this.setDaemon(true);//声明该线程为守护线程
	}
	public void run(){
		while(true){
			System.out.println(new Date());
			try{
				Thread.sleep(1000);
			} catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

执行结果:

java守护线程

题外话:

刚从官网下的jdk11,发现新版可以直接利用 java 文件名 的方式来执行java文件了呀。最最最重要的是没有见到生成.class文件(可能是生成了临时的吧。我感觉应该会生成.class文件)。不过,跟以前一样先javac命令生成.class文件,再用java执行也是没问题的。

相关文章: