我在Java中了解到:子线程比主线程更胜一筹,但是,看起来,这个应用程序的行为显示出不同的结果。
子线程在主线程完成工作的同时继续工作!
以下是我的工作:
public class Main {
public static void main(String[] args) {
Thread t = Thread.currentThread();
// Starting a new child thread here
new NewThread();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("\n This is the last thing in the main Thread!");
}
}
class NewThread implements Runnable {
private Thread t;
NewThread(){
t= new Thread(this,"My New Thread");
t.start();
}
public void run(){
for (int i = 0; i <40; i++) {
try {
Thread.sleep(4000);
System.out.printf("Second thread printout!\n");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
我在这里无法理解......或者从JDK 9开始,这是Java的新功能?
答案 0 :(得分:6)
根据Thread#setDaemon
的{{3}}:
当运行的唯一线程都是守护程序线程时,Java虚拟机退出。
您的子线程不是守护程序线程,因此即使主线程不再运行,JVM也不会退出。如果在t.setDaemon(true);
的构造函数中调用NewThread
,则JVM将在主线程执行完毕后退出。