3

我正在寻找有关 java main 方法 public static void main(String[] args)的更多知识。当 JVM 调用 main 方法时,它会创建主线程,并且整个程序在此主线程中执行,直到某个用户线程在其自己的堆栈中显式启动。

我的问题是可以main从其他main方法启动线程吗?

如果有人能给我一些关于主线程的参考,那就更好了。

4

3 回答 3

8

线程只是一个概念,它是启动您的应用程序的线程的名称,该线程在任何方面都没有特殊(除了不是守护线程),因此您可以轻松创建也不是守护进程的新线程并调用他们的另一个主要方法。

作为主线程并没有什么特别之处,它只是第一个要启动的线程。

于 2012-06-08T12:07:43.843 回答
0

据我所知,主线程由JVM启动,用户启动的其他线程是该线程组中主线程的子线程。

于 2012-06-08T12:08:29.830 回答
0
类 FirstApp {
    公共静态无效主要(字符串[]参数){
        新线程(新可运行(){
            @覆盖
            公共无效运行(){
                SecondApp.main(args);
            }
        })。开始();

启动一个新线程并调用另一个应用程序的 main 方法。工作正常。但它们都在同一个进程中运行。

但是,如果您想像从命令行(在另一个(单独的)进程中)执行它一样执行此操作,您也可以执行以下操作:

导入java.io.File;
导入 java.io.IOException;
导入 java.lang.management.ManagementFactory;

公共类主要{
    public static void main(String[] args) 抛出 IOException,InterruptedException {
        StringBuilder cmd = new StringBuilder();
        cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java");
        对于(字符串 jvmArg:ManagementFactory.getRuntimeMXBean().getInputArguments()){
            cmd.append(jvmArg + " ");
        }
        cmd.append("-cp").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append("");
        cmd.append(Main2.class.getName()).append(""); // Main2是第二个应用的主类
        对于(字符串参数:参数){
            cmd.append(arg).append("");
        }
        Runtime.getRuntime().exec(cmd.toString());
       // 在此处继续您的正常应用程序代码
    }
}

我主要从如何重新启动 Java 应用程序中获取第二个代码?

于 2012-06-08T12:22:17.190 回答