私はRunnableを実装するJavaクラスを持っています。 runメソッドでは、次のコードを取得していますが、なぜそれが動作するのか、誰かがそれを私に説明できることを期待していたのかを完全には理解できません。スレッドのこの側面の少しの説明を使用することができます
コードは次のとおりです。だから、
public void run() {
Process p = null;
ProcessBuilder builder = new ProcessBuilder();
builder.redirectErrorStream(true);
p = builder.command("/opt/program/testscript.sh").start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
try {
while ((line = br.readLine()) != null) {
log.info(line);
}
boolean running = true;
while(running) {
p.waitFor();
running = false;
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
p.destroy();
}
}
、上部には、実行中のプロセスからの出力を取得し、それを表示しています。中間の部分は、スレッドが処理するのをコードが待つ場所のようです。私が理解しているように、コードは停止し、スレッドが終了するまでp.waitFor()
コマンドでwhileループで待ってから、すべてを終了する必要があります。しかし、スレッドが実行されている間は、出力が表示され続けているので、上のwhileループがまだヒットしていることは明らかです。
スレッディングは常に私の弱点であり、明らかに私はここで何が起こっているのかを完全に把握していません。私はそれが有効だと思うので、コードは動作します。おそらくコード化されていないのでしょうか?とにかく、助けていただきありがとうございます。すべての情報について
UPDATE
感謝。 while(実行中)ループは何もしないという意味になります。私はそれを削除します。上記のコードの残りの部分を追加しました。私が以前に提供していないコードは、誰かがさらに追加するものがある場合に備えて、さらにコンテキストを提供するために提供していません。
あなたが探していた解決策や説明が回答から得られましたか? – Attila
実際には、私は彼らが質問に答えたと思う。良い点、私は受け入れられた答えとして1つマークします。 – cardician