Java で読み込むブロッキング ファイルを設定したいと思います。つまり、によってラップされFileInputStream
、任意のread()
メソッドが呼び出されると、呼び出しがブロックされるようなファイルを用意します。
OSに依存しない簡単な方法は考えられません.UnixのようなOSではmkfifo
、そのファイルを使用してFIFOを作成して読み取ることができます。考えられる回避策は、非常に大きなファイルを作成してそこから読み取ることです.スタックをキャプチャする前に読み取りが完了する可能性は低いですが、それは醜くて遅いです.
対応するソケットのread()
ケースは簡単にセットアップできます。自分でソケットを作成してそこから読み取ると、確定的なブロッキングを行うことができます。
その目的は、メソッドのスタックを調べて、そのような場合にトップ フレームが何であるかを判断することです。実行中のすべてのスレッドのスタック トレースを定期的にサンプリングし、そのスレッドが現在行っていることを分類しようとするコンポーネントがあるとします。実行できることの 1 つは、ファイル IO です。そのため、ファイル IO 中に「スタックのトップ」がどのように見えるかを知る必要があります。私はすでに実験(さまざまな方法でファイルを読み取り、スタックをサンプリングするだけ)によってそれを決定しましたが、これが変更された場合に失敗するテストを書きたいと思っています。
このようなテストを作成する自然な方法は、ファイルの読み取りを行うスレッドを開始してから、トップ フレームを調べることです。これを確実に行うには、ブロッキング読み取りが必要です (そうしないと、スタック トレースが取得される前にスレッドが読み取りを終了する可能性があります)。