0

それの文書でReader.read()言う

1文字を読み取ります。このメソッドは、文字が使用可能になるか、I / Oエラーが発生するか、ストリームの終わりに達するまでブロックします。

read()ストリームから何も取得しない場合、ブロックされます。ただし、この種の「ブロック」はスレッドをState.BLOCKEDまたはに変換しません。最初の文字を待機するときにState.WAITINGスレッドはまだ存在しているため、スレッドが。によってブロックされているかどうかはわかりません。State.RUNNABLEread()read()

Reader.read()では、別のスレッドからのスレッドでブロックされているかどうかをどのように知ることができますか?

4

3 に答える 3

0

スレッドのスタックトレースを取得して、その時点で実行されているメソッドを確認できます。

または、読み取りが開始する時刻を設定します。これは、読み取りが終了するとより明確になります。今回チェックし、長すぎると警告を発する別のスレッドがあります。

于 2012-08-10T09:05:05.073 に答える
0

読み取りがブロックされるかどうかを確認してみませんReader#ready()か?

于 2012-08-10T09:07:33.827 に答える
0

Socket.setSoTimeout()を使用して読み取りタイムアウトを設定し、SocketTimeoutExceptionをキャッチするだけです。

于 2012-08-11T02:09:27.383 に答える