プロセス出力の非同期的なキャプチャとリダイレクト
ProcessBuilder を使用してプロセスを起動するとき、場合によっては、プロセスをブロックせずに stdout および stderr 出力を転送する必要が生じることがあります。メインスレッド。デフォルトでは、プロセス ストリームからの読み取りは呼び出し元をブロックするため、同時実行性を必要とするタスクには適していません。
非同期出力リダイレクトを実現する 1 つの方法は、stdOut ストリームを継続的に監視し、その内容をストリームに書き込むスレッドを手動で作成することです。システムアウト。ただし、このアプローチは煩雑になる可能性があり、追加のスレッド管理が必要になります。
このプロセスを合理化するために、ProcessBuilder は、サブプロセスの標準 I/O ストリームをシームレスに設定する継承 I/O メソッドを提供します。 Javaプロセスを呼び出しています。これにより、サブプロセスによって生成された出力は手動でスレッドを作成することなく、コンソールに直接送信されます。
あるいは、inheritIO をサポートしていない古い Java バージョンの場合は、スレッドを使用したカスタム実装を使用できます。
この実装は、サブプロセスの入力ストリームとエラー ストリームを監視するスレッドを作成し、そのデータを System.out と System.err に転送します。 それぞれ。入力ストリームが最後に達するため、サブプロセスが完了するとスレッドは自動的に終了します。
以上がJava でプロセス出力を非同期にキャプチャしてリダイレクトする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。