0

ローカル ディスクに保存された jar ファイルを複数回実行したいと考えています。jar ファイルは、特定のインスタンスで何度も実行する必要があります。すべての jar ファイル (同じファイル) は一緒に実行する必要があります。私がそれを達成できる方法はありますか?複数のスレッドを作成するコードを書く必要がありますか?

とりあえず、多くのコマンドプロンプトを開き、cmdでjarを個別に呼び出して、同時に実行します。しかし、これは効率的な方法ではありません。これを行うより効率的な方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

4

20 ~ 30 の cmd ウィンドウを開いて個別に実行できません。プロセッサへの負荷が高くなります。

その方法では、(20-30)-1 JVM のオーバーヘッドがあります。次のように 2 番目のメイン クラスを作成できます。

public static void main(final String[] args) {
    int numberOfSimultaneousExecutions = 25;
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions);
    for (int i = 0; i < numberOfSimultaneousExecutions; i++) {
        executor.execute(new Runnable() {
            @Override
            public void run() {
                RealMainClass.main(args);
            }
        });
    }
}

これで、JAR は1 つのJVM で同時に実行されます。

ただし、これは危険です。コードが共有静的値にアクセス (および変更) している場合、アプリケーション ほぼ確実に 壊れます。

引数から同時実行数を取得することもできます。

public static void main(final String[] argsWithNum) {
    int numberOfSimultaneousExecutions = Integer.parseInt(argsWithNum[0]);
    final String[] args = new String[argsWithNum.length - 1];
    System.arraycopy(argsWithNum, 1, args, 0, args.length);
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions);
    ...
于 2012-09-07T08:33:34.743 に答える
0

何かを実行するには、スレッドが必要です。何かを同時に複数回実行したい場合は、複数のスレッドが必要です。すべてのコードがスレッドセーフになるように書かれているわけではないため、これを行った場合にコードが正しく動作することを確認する必要があります。

于 2012-09-07T08:10:02.970 に答える