2016-09-01 10 views
0

5つのスレッドがあり、スレッドに関連付けられたファイルに既に行番号が割り当てられているとします。たとえば、スレッド1は行番号に書き込みます。 1から5まで、スレッド2は6から10に書き込みます...スレッド5は21から25に書き込みます。これを並列に行うことができるJavaプログラムを作成したい(つまり、単一のスレッドでファイルをロックしない)複数のスレッドを1つのファイルに書き込む方法は、あらかじめ定義されたセクションを(行番号で)書きますか?

+2

テキストファイルの行の長さが異なる可能性があります。したがって、問題があります。書き込みのための正しい位置を得るには... – MBo

+1

同時アクセスをサポートするファイルシステムが必要です(つまり、1つのファイル内で複数の読み書き位置が必要です)。私はそのようなファイルシステムをサポートするオペレーティングシステムについては知らない。 – Hulk

+0

なぜこれが必要でしょうか?ファイルへの書き込みは、通常のスレッドが行うことができるものより数百倍遅くなります。 IOは処理能力ではなくバインドされています。 – mvd

答えて

0

Javaで利用可能なNIO APIを使用することをお勧めします。具体的にあなただけのファイルチャネルは、ファイルに接続されているSeekableByteChannelでいただきました重要

の利益のために、ここで文書を引用するFileChannel

に興味があるでしょう。 ファイル内に現在の位置があります。この位置は問合せされ、 となります。ファイル自体には、読み書き可能な可変長シーケンス バイトが含まれており、現在のサイズは となります。

ファイルの領域が他のプログラムによるアクセスに対してロックされている可能性があります。

ファイルチャネルは、複数の同時スレッドで使用するのに安全です。 closeメソッドは、チャンネル インターフェイスで指定されているように、いつでも呼び出すことができます。

関連する問題