-1

私は、複数のスレッドがログの1つを書き込むことができるログを実装しています。List最後のスレッドはListの内容をファイルに書き込む必要があります。したがって、最後にListに書き込むスレッドは、Listをファイルにフラッシュする必要があります。これを達成する最良の方法は何ですか?複数のスレッドが到着し、最後は処理を行うべきです

Listの場合、複数のライターと1つのリーダーにとって効率的な並行クラスの1つが必要です。

+0

あなたの質問は、あまりにも不明瞭で、答えることはできません。たとえば、スレッドは最後のスレッドであることをどのように認識しますか? –

+0

@RolfSchäubleそれは問題の一部です。スレッドは、ファイルへの書き込みを試みる必要があります。後続のスレッドは、同じ処理を行う必要がありますが、すでに書き込まれているものはファイルに書き込まれません。したがって、ロジックは次のようになります。他のスレッドがキューに入れられていない限り、書き込みを行います。その場合、キュー内の最後のスレッドが書き込む必要があります。 – Roland

+0

@Roland各スレッドがそのデータ(そのデータが何であれ)をファイルに書き込ませ、ファイルアクセスを同期させてインターリーブ書き込みを避けるのはなぜですか? これが不可能な場合は、シナリオの詳細が参考になります。それはまだかなり曖昧です。 –

答えて

-1

私のソリューション:

  1. は、スレッドの数を決定しますが、(Nを言う)(カウントがゼロになるまで)、すべてのスレッドが一覧に値を移入するための
  2. 待ちカウンタとしてNと
  3. スタートされたCountDownLatch
  4. 必要に応じて、メインスレッドからファイルにリストを保存します。

    それとも

  5. メインスレッドから新しいスレッドを作成し、ファイルにリストを格納します。

CountDownLatchの使用上のポスト下記を参照してください。

How is CountDownLatch used in Java Multithreading?

Javaで利用できる唯一の同時一覧コレクションがある:CopyOnWriteArrayList

のArrayList内のスレッドセーフな変数すべての変異操作(add、setなど)は、基本となる配列の新しいコピーを作成することによって実装されます。

0

私の場合、単純な解決策はCloseableを実装してからcloseメソッドでフラッシュすることでした。

関連する問題