控制与第一个线程实例相关

时间:2014-05-16 20:58:31

标签: java multithreading processbuilder

我启动这个线程,基本上使用ProcessBuilder执行系统调用。

Runnable threadJob = new MyRunnable();
new Thread(threadJob).start();

此线程使用其run()方法执行以下Process Builder:

    ProcessBuilder pb = new ProcessBuilder(commands);
    pb.redirectErrorStream(true);
    Process process = pb.start();

    // Read output
    StringBuilder out = new StringBuilder();
    BufferedReader brin = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = null, previous = null;
    while ((line = brin.readLine()) != null) {
        if (!line.equals(previous)) {
            previous = line;
            out.append(line).append('\n');
        }
    }

当成功执行此线程时,我在其中启动一个不同的线程以使用ProcessBuilder启动xterm:

    if (process.waitFor() == 0) {
        Runnable threadJob2 = new XRunnable();
        new Thread(threadJob2).start(); 
    }

使用XRunnable()的run()方法中的以下代码成功启动Xterm:

    ProcessBuilder pb = new ProcessBuilder(commands);
    pb.redirectErrorStream(true);
    Process process = pb.start();

    // Read output
    StringBuilder out = new StringBuilder();
    BufferedReader brin = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = null, previous = null;
    while ((line = brin.readLine()) != null) {
        if (!line.equals(previous)) {
            previous = line;
            out.append(line).append('\n');
        }
    }

    if (process.waitFor() == 0) {
        System.out.println("Xterm killed")
    }

问题我面临的是控制总是停留在这个Xterm上。如果我使用相同的线程启动另一个Xterm,那么它将无法控制,我无法在新的Xterm窗口中键入任何内容,直到前一个被杀死。我认为问题是它在第一个Xterm的读取输入流时停留,并且没有创建新的输入流来读取第二个Xterm。这就是为什么我可以在第一次Xterm被杀之后输入内容。有人可以建议解决这个问题吗?我想在每个Xterm窗口中输入一些东西,我多次使用相同的线程代码打开。

1 个答案:

答案 0 :(得分:0)

我的错...问题不在于上面的代码。上面显示的代码绝对没问题。哈希表搞乱了线程ID。感谢David的回复。