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