スレッドは、1つまたは複数のストリーム/パイプのデータが利用可能になるのを待ってから、データを取得してからもう一度待機してください。javaでは、データがストリームまたはパイプ上で利用可能になったときに通知される方法はありますか?
InputStream is = process.getInputStream() // stdout of process
is.setOnDataAvailable((stream)-> {
readerThread.signal ... // tell thread to wake up or put worker task in queue
});
// reader thread
dataAvailable = true; // start assuming data there.
for(;;) {
if(!dataAvailable) {
waitForSignal();
}
dataAvailable = false;
for(allINputs) {
if(input.dataAvailable()) {
read it and do something
dataAvailable = true; // might be more check inputs again
}
}
}
私はJavaの未来があなたのユースケースを処理できると思うhttps://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html – jeanr
入力ストリームはブロックストリームですが、それはまだデータが有効になるまで読み取り操作がブロックされることを意味します。なぜあなたは上記のことをしたいのですか? – dabaicai
@jeanr Javaの将来は、プロセスやスレッドのタスクを管理するために書かれた「ラッパー」APIのようですが、ストリームを読み込むためにプロセスやスレッドを手作業で作成するよりパフォーマンスの利点はほとんどありません。それを行う便利な方法。 – peterk