0

大きな質問があります。このようなJavaプログラムを実行したいのですが、同時に100個のファイルを処理し、引数としてファイル番号を入力したいのです。

public class infiniteloop {
  public static void main(String[] argv){
     while(true){
         // set the texfile name with argv[0]
         // waiting for start 
         //read and process a text
     }
  }
}

このコードを試してみましたが、実行しようとすると、最初のプログラムの実行に行き詰まります。

#!bin/bash
java -c .:somejar.jar infiniteloop 100001
java -c .:somejar.jar infiniteloop 100002
.
.
.

2番目のコマンドを実行することはありません。おそらく、ターミナルの新しいインスタンスを作成しますか?新しいタブと新しいタブでそれぞれを実行しますか?、作業はsshを使用してリモートサーバーで行われます。

4

4 に答える 4

2

各コマンドの最後に文字を追加&して、バックグラウンドで各プロセスを実行します。

#!/bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
...
java -c .:somejar.jar infiniteloop <last filename>

各プロセスはバックグラウンドで開始されるため、スクリプトは次のコマンドを続行できます。

また、不足/していることに注意してください:#!/bin/bash

于 2012-07-03T18:30:02.893 に答える
1

最初の行の最後に「&」を追加します

java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002

バックグラウンドで実行されるため、2番目のコマンドを実行し続けます。

于 2012-07-03T18:29:54.290 に答える
0

Javaスレッドを見てください。http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html

これはそれを非常によく説明しています http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

class ThreadDemo
{
   public static void main (String [] args)
   {
       for (int i = 0; i < args.length; i++)
           MyThread mt = new MyThread(arg[i]);
           mt.start()
   }
}
class MyThread extends Thread
{
   String file_name;
   public MyThread(String file_name){
      this.file_name = file_name;
   public void run (){
      while(true){
         // set the texfile name with argv[0]
         //read and process a text
      }
   }
}

それを行うための最良の方法ではありませんが、うまくいくはずです

于 2012-07-03T18:38:59.403 に答える
0

&各行の最後に文字を含めたいので、コードは次のようになります

#!bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &

これは Bash の機能であり、Java プロセス自体ではないことに注意してください。

于 2012-07-03T18:31:53.880 に答える