如果我要编写一个创建线程的主类,那么该类创建的线程是否有可能比创建它的类的main()更长。
在某种程度上似乎可能因为,我可以使新创建的线程休眠一小时,因此新堆栈进入阻塞状态,使原始主堆栈可以执行,主堆栈执行并且没有其他任何内容do,而新堆栈仍处于阻塞状态。
但另一方面,在Java中有这样的陈述,一切都以main()方法开始和结束。
请告诉我哪一个是正确的
答案 0 :(得分:5)
是的,但前提是您创建的线程不是守护程序线程。这个(非守护进程)实际上是默认的。
答案 1 :(得分:3)
Java中有这样的陈述,一切都以main()方法开始和结束。
事实并非如此。
import java.io.PrintStream;
class Main {
static {
System.out.println("0) Printed before main");
}
public static void main(String... args) {
System.out.println("1) Printed in main");
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("3) Printed long after main");
}
});
throw new RuntimeException() {
public void printStackTrace(PrintStream ps) {
System.err.println();
System.out.println("2) Printed after main");
}
};
}
}
打印
Exception in thread "main"
0) Printed before main
1) Printed in main
2) Printed after main
3) Printed long after main
答案 2 :(得分:2)
这不仅是可能的,而且是您编写Swing应用程序时的正常状态。你不应该在Swing线程之外创建Swing组件,因此主线程将一个任务排队,在Swing线程中创建UI,然后退出。