ホームページ  >  記事  >  Java  >  メインスレッドをブロックせずにJavaでサブプロセス出力を非同期にリダイレクトする方法は?

メインスレッドをブロックせずにJavaでサブプロセス出力を非同期にリダイレクトする方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 04:02:02633ブラウズ

How to Redirect Subprocess Output Asynchronously in Java Without Blocking the Main Thread?

メインスレッドをブロックせずにプロセス出力をリダイレクトする

質問

Java アプリケーションで、サブプロセスの stdout および stderr 出力をキャプチャするにはどうすればよいですか? ProcessBuilder を使用して起動し、それを System.out に非同期にリダイレクトすることで、サブプロセスと出力リダイレクトをbackground?

現在のアプローチでは、継続的に stdout から読み取り、System.out に書き込む新しいスレッドを手動で作成する必要がありますが、面倒に感じられ、追加のスレッド管理が必要になります。もっと洗練された解決策はありますか?

回答

ProcessBuilder.inheritIO を利用すると、現在の Java プロセスの標準 I/O をミラーリングするようにサブプロセスの標準 I/O を設定できます。これにより、別のスレッドを必要とせずにサブプロセスの出力が System.out に直接リダイレクトされます。

Java 7 の使用が不可能な場合、別のオプションはスレッドを使用して手動でリダイレクトすることです:

このアプローチでは、入力/エラー ストリームが最後に達すると、サブプロセスが完了すると自動的に終了するスレッドを利用します。

以上がメインスレッドをブロックせずにJavaでサブプロセス出力を非同期にリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。