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
.
.
.

永远不会运行第二个命令,也许会创建终端的新实例?新选项卡并在新选项卡中执行每个选项卡?工作是在带有 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

它将使它在后台运行,因此它将继续运行第二个命令。

于 2012-07-03T18:29:54.290 回答
0

您想&在每行的末尾包含字符,因此您的代码将如下所示

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

请注意,这是 Bash 的一个特性,而不是 java 进程本身。

于 2012-07-03T18:31:53.880 回答
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 回答