2011-11-06 16 views
2

入力ストリーム "ブロック"について何も見つからないことがあります。これは、同じストリームにアクセスする同時スレッドのマルチスレッド防止のいくつかのタイプですか?Javaの入力ストリーム "ブロック"とマルチスレッド

2つの同時スレッドが同時に同じストリームにアクセスすると、問題が発生する可能性がありますか、両方のスレッドが独自のストリームポインタを取得できますか?明らかに、待つ必要がありますが、うまくいけば、チェックされていない例外につながることはないでしょう。

答えて

2

入力ストリームのコンテキストでは、通常、「ブロッキング」は、より多くのデータが利用可能になるのを待っているストリームを指します。この用語は、ファイルではなくソケットについて考えるなら、おそらくもっと意味があるでしょう。

複数のスレッドが同時に同じストリームから読み込んでいる場合は、独自の同期を行う必要があります。スレッド固有の「ストリームポインタ」はありません。ここでも、(ファイルではなく)同じソケットから読み込んだ複数のスレッドについて考えてみましょう。

+0

したがって、スレッド1がストリームの先頭からデータの読み取りを開始した後で、スレッド2が同じストリームからの読み取りを開始した場合、スレッド2は最初から読み込まれますか? –

+0

@ user1030796:後者(スレッド1は中止)。 – NPE

+1

@aixストリームは必ずしもスレッドセーフではないので、答えは「あなたは確かに言うことはできません」です。つまり、スレッド1で読み取られた場合、あなたは正しいですか?スレッド2で読み取られます。 – alf

1

ストリームにストリームポインタがあります。 2つのスレッドが同じストリームを読み込むことはあまり意味がありません。

+0

あなたが言っていることを見てください。私はそれが間違った言葉かもしれない、または多分私の頭の中で間違って全体を思い付くかもしれないと思う。時には私自身も混乱します。 –

4

"ブロッキング"は、呼び出しスレッドに制御を戻す前に、より多くの情報(読み込み用)または一部の内部バッファ(書き込み用)のより多くのスペースを待つ間、読み書きがハングしたときです。

ストリームオブジェクトが独自の読み書き位置を処理するので、ポインタがストリームオブジェクトを指していることを確信しています。ストリームオブジェクトは、独自のバッファから読み込みます。したがって、同期メソッドを使用して読んでいる場合は、各読取りはその順番を待って、重複しない(重複しない)データを取得します。メソッドが同期されていない場合、私はすべての地獄が緩んでいると確信しています。

関連する問題