一个主线程可以调用java中的其他主线程

时间:2012-06-08 12:04:45

标签: java multithreading

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

我的问题是,是否可以从其他main方法启动main个帖子?

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

3 个答案:

答案 0 :(得分:8)

主线程只是一个概念,它是启动你的应用程序的线程的名称,这个线程在任何方面都不是特殊的(除了不是守护程序线程)所以你可以很容易创建不是守护进程的新线程,并在其上调用另一个main方法。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

class FirstApp {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                SecondApp.main(args);
            }
        }).start();

启动一个新线程并调用另一个应用程序的main方法。工作良好。但是他们都在相同的过程中运行

但是,如果你想这样做就好像它是从命令行执行的(在另一个(单独的)进程),你也可以这样做:

import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        StringBuilder cmd = new StringBuilder();
        cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java ");
        for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
            cmd.append(jvmArg + " ");
        }
        cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" ");
        cmd.append(Main2.class.getName()).append(" "); // Main2 is the main class of the second application
        for (String arg : args) {
            cmd.append(arg).append(" ");
        }
        Runtime.getRuntime().exec(cmd.toString());
       // continue with your normal app code here
    }
}

我主要从How can I restart a Java application?

获取第二个代码