Java中的线程,可以使用run()在堆栈前使用main()die / end进行堆栈吗?

时间:2014-06-25 06:06:47

标签: java multithreading

如果我要编写一个创建线程的主类,那么该类创建的线程是否有可能比创建它的类的main()更长。

在某种程度上似乎可能因为,我可以使新创建的线程休眠一小时,因此新堆栈进入阻塞状态,使原始主堆栈可以执行,主堆栈执行并且没有其他任何内容do,而新堆栈仍处于阻塞状态。

但另一方面,在Java中有这样的陈述,一切都以main()方法开始和结束。

请告诉我哪一个是正确的

3 个答案:

答案 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,然后退出。