私は、複数のスレッドがログの1つを書き込むことができるログを実装しています。List
最後のスレッドはList
の内容をファイルに書き込む必要があります。したがって、最後にList
に書き込むスレッドは、List
をファイルにフラッシュする必要があります。これを達成する最良の方法は何ですか?複数のスレッドが到着し、最後は処理を行うべきです
List
の場合、複数のライターと1つのリーダーにとって効率的な並行クラスの1つが必要です。
私は、複数のスレッドがログの1つを書き込むことができるログを実装しています。List
最後のスレッドはList
の内容をファイルに書き込む必要があります。したがって、最後にList
に書き込むスレッドは、List
をファイルにフラッシュする必要があります。これを達成する最良の方法は何ですか?複数のスレッドが到着し、最後は処理を行うべきです
List
の場合、複数のライターと1つのリーダーにとって効率的な並行クラスの1つが必要です。
私のソリューション:
必要に応じて、メインスレッドからファイルにリストを保存します。
それとも
メインスレッドから新しいスレッドを作成し、ファイルにリストを格納します。
CountDownLatch
の使用上のポスト下記を参照してください。
How is CountDownLatch used in Java Multithreading?
Javaで利用できる唯一の同時一覧コレクションがある:CopyOnWriteArrayList
のArrayList内のスレッドセーフな変数すべての変異操作(add、setなど)は、基本となる配列の新しいコピーを作成することによって実装されます。
私の場合、単純な解決策はCloseable
を実装してからclose
メソッドでフラッシュすることでした。
あなたの質問は、あまりにも不明瞭で、答えることはできません。たとえば、スレッドは最後のスレッドであることをどのように認識しますか? –
@RolfSchäubleそれは問題の一部です。スレッドは、ファイルへの書き込みを試みる必要があります。後続のスレッドは、同じ処理を行う必要がありますが、すでに書き込まれているものはファイルに書き込まれません。したがって、ロジックは次のようになります。他のスレッドがキューに入れられていない限り、書き込みを行います。その場合、キュー内の最後のスレッドが書き込む必要があります。 – Roland
@Roland各スレッドがそのデータ(そのデータが何であれ)をファイルに書き込ませ、ファイルアクセスを同期させてインターリーブ書き込みを避けるのはなぜですか? これが不可能な場合は、シナリオの詳細が参考になります。それはまだかなり曖昧です。 –