【问题标题】:Can one main thread call other main thread in javajava中一个主线程可以调用另一个主线程吗
【发布时间】:2012-06-08 20:22:17
【问题描述】:

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

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

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

【问题讨论】:

  • @user1329572 我知道。你能再读一遍我的问题吗?
  • 你想生成一个全新的 JVM 吗?或者只是从不是主线程的线程中调用主方法?
  • @serg10: 这可能是也可能不是主线程。

标签: java multithreading


【解决方案1】:

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

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

【讨论】:

  • 所以这个线程是由 JVM 启动的。但是假设我的应用程序有两个主要方法,我想从另一个方法调用一个方法。
  • 你就叫它SomeClass.main(args),没什么特别的。 main方法也是只是一个方法,也没有什么特别之处。
  • 但它会在同一个堆栈中运行意味着它不会再创建一个主线程
  • 所以你应该创建一个新线程并在这个新线程上调用它。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    类 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());
           // 在此处继续您的正常应用程序代码
        }
    }
    

    我主要从How can I restart a Java application?获取第二个代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多