我有一个很大的问题,我想执行这样的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的远程服务器中。
答案 0 :(得分:2)
在每个命令的末尾添加一个&
字符,在后台运行每个进程:
#!/bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
...
java -c .:somejar.jar infiniteloop <last filename>
每个进程都将在后台启动,因此脚本可以继续执行下一个命令。
另请注意:[{1}}
中缺少/
答案 1 :(得分:1)
添加“&amp;”在第一行的末尾
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002
它将使它在后台运行,因此它将继续运行第二个命令。
答案 2 :(得分:0)
您希望在每行的末尾添加&
字符,因此您的代码将如下所示
#!bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
请注意,这是Bash的一个功能,而不是java进程本身。
答案 3 :(得分: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
}
}
}
这不是最好的方法,但它应该有效