3

Javaのメインメソッド についてもう少し知識を探していますpublic static void main(String[] args)。JVMがメインメソッドを呼び出すと、メインスレッドが作成され、一部のユーザースレッドが独自のスタックで明示的に開始されるまで、プログラム全体がこのメインスレッドで実行されます。

main私の質問は、他のmain方法からスレッドを開始することは可能ですか?

誰かが私にメインスレッドについての参照を与えることができればそれはより良いです。

4

3 に答える 3

8

メインスレッドは単なる概念であり、アプリを開始するスレッドの名前です。このスレッドは(デーモンスレッドではないことを除いて)特別なものではないため、デーモンではない新しいスレッドを簡単に作成して呼び出すことができますそれらの別の主な方法。

メイン スレッドであることは特別なことではなく、最初に開始されるスレッドにすぎません。

于 2012-06-08T12:07:43.843 に答える
0

私の知る限り、メイン スレッドは JVM によって開始され、ユーザーによって開始された他のスレッドは、そのスレッド グループ内のメイン スレッドのサブスレッドです。

于 2012-06-08T12:08:29.830 に答える
0
クラスFirstApp {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @オーバーライド
            public void run() {
                SecondApp.main(引数);
            }
        })。始める();

新しいスレッドを開始し、別のアプリケーションのメイン メソッドを呼び出します。正常に動作します。しかし、どちらも同じプロセスで実行されます。

ただし、コマンドラインから(別の(別の)プロセスで)実行されたかのように実行したい場合は、次のようにすることもできます。

java.io.File をインポートします。
import java.io.IOException;
java.lang.management.ManagementFactory をインポートします。

パブリック クラス メイン {
    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 は 2 番目のアプリケーションのメイン クラスです
        for (文字列 arg : args) {
            cmd.append(arg).append(" ");
        }
        Runtime.getRuntime().exec(cmd.toString());
       // ここで通常のアプリ コードを続行します
    }
}

2 番目のコードは、主にHow can I restart a Java application?から取得しました。

于 2012-06-08T12:22:17.190 に答える