I want to run an external programs repeated N times, waiting for output each time and process it. Since it's too slow to run sequentially, I tried multithreading. The code looks like this:
public class ThreadsGen {
public static void main(String[] pArgs) throws Exception {
    for (int i =0;i < N ; i++ )
    {
        new TestThread().start();
    }   
}
static class TestThread extends Thread {
public void run() {
        String cmd = "programX";
        String arg = "exArgs"; 
        Process pr;
        try {
            pr = new ProcessBuilder(cmd,arg).start();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            pr.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //process output files from programX.
        //...
}
However, it seems to me that only one thread is running at a time (by checking CPU usage).
What I want to do is getting all threads (except the one that is waiting for programX to finish) working? What's wrong with my code?
Is it because pr.waitFor(); makes the main thread wait on each subthread?
 
     
     
    