2011-06-21 6 views
0

2つのスレッドで1つのテキストファイルを読み込む必要がありますが、読み込みを順番に行う必要があります。例:スレッド1はロックを取得し、最初の行を読み込み、ロックはフリーです。スレッド2はロックを取得し、2行目を読みます。 私は同じバッファリーダーなどを共有しようと考えていましたが、それについてはあまりよく分かりません。 ありがとうございます!Java - マルチスレッドとファイル質問

EDITED

は糸で2クラスごといずれかになります。これら2つのクラスは同じファイルを読み込みます。

+0

質問にバッククォート( ')を使用すると、テキストがコードとして書式設定されます。 – razlebe

+0

これは無関係かもしれません。なぜあなたはこれをしたいですか? – RMT

答えて

3

あなたは言うようにBufferReaderをロックすることができます。

パフォーマンスは1つのスレッドを使用するよりも悪くなる可能性があります。しかし、あなたは運動としてそれをすることができます。

+0

答えをありがとう! 'FileChannel'ロックを使用してBufferReaderをロックすることはできますか、それとも手動で行いますか? – Samth

+0

スレッド間で共有されているオブジェクトを使用できます。これが機能するには、BufferedReaderまたはFileChannelを共有する必要があります。おそらく無意味だと私の警告を読んだ。 ;) –

+0

しかし、どうやってスレッド間でオブジェクトを正確に共有できますか? – Samth

1

少なくとも1つの処理の開始を保証するには、あるスレッドでファイルを1行ずつ読み込み、結果の入力行をConcurrentLinkedQueueなどのキューを介してスレッドプールに渡す方が効果的ですファイルの行の。実装がはるかに簡単で、ファイルの読み込みに使用するクラスには何の競合もありません。

キャストアイアンの理由があるのでなければ、は、の読み取りが各スレッドにローカルで行われる必要があるので、このようなファイルを共有しないでください。

+0

+1クリーナーソリューションです。それは私がそれを行う方法です - 1つ、プロセス、キューを2に読み込みます。 –