複数のスレッドが到着すると、最後に処理を行う必要があります -- java フィールド と multithreading フィールド と concurrency フィールド と java.util.concurrent フィールド と atomicity フィールド 関連 問題

Multiple threads arrive, the last should do the processing












-1
vote

問題

日本語

複数のスレッドが1つの List に書き込むことができるロギングを実装しています。最後のスレッドは、 List の内容をファイルに書き込む必要があります。そのため、 List への最後のスレッドは、<コード> List をファイルにフラッシュする必要があります。これを達成するための最良の方法は何ですか?

List には、複数のライタと1つのリーダーにとって効率的な同時クラスの1つが必要です。
英語

I'm implementing a logging where multiple threads can write into one List of log. The last thread should write the contents of the List to a file. So the thread which is the last to write into the List should flush the List into a file. What is the best way to accomplish this?

For the List I just need one of the concurrent classes that is efficient for multiple writers and one reader.

</div
              
         
         

回答リスト

0
 
vote

私の場合 Fetch API0 を実装してから、 Fetch API1 メソッドのフラッシュを実行します。

 

In my case the simple solution was to implement Closeable and then do the flushing in the close method.

</div
 
 
-1
 
vote

私の解決策:

  1. スレッド数を決定する(n)
  2. カウンタ
  3. としてnでcountdownlatchを起動します。
  4. すべてのスレッドをリスト内の値(カウントゼロがゼロの)に入力するのを待ちます
  5. あなたが望むならメインスレッドからリストをファイルに保存します。

    または

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

  7. <コード> CountDownLatch :

    の使用方法の下記の投稿を参照してください。

    Javaマルチスレッドで使用されるCountDownLatchはどうですか?

    Javaで利用可能な唯一の同時リストコレクションは次のとおりです。 CopyOnWriteArrayList

    基礎となる配列の新鮮なコピーを作成して、すべての変異演算(追加、設定など)が実装されているArrayListのスレッドセーフなバリアント。

 

My solution:

  1. Decide number of threads ( say N)
  2. Start a CountDownLatch with N as counter
  3. Wait for all threads to populate the value in List ( till count is zero)
  4. Now store the list into file from the main thread if you wish.

    Or

  5. Create a new Thread from main thread and store the list into file.

Refer to below post on usage of CountDownLatch:

How is CountDownLatch used in Java Multithreading?

The only concurrent List collection available in java is : CopyOnWriteArrayList

A thread-safe variant of ArrayList in which all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underlying array.

</div
 
 

関連する質問

12  C ++ 11のメモリモデルは、ループからリラックスしたアトミック負荷を吸い上げることを可能にしますか?  ( Does the c11 memory model allow hoisting relaxed atomic loads out of loops ) 
次のコードを考慮してください。 <事前> <コード> #include <atomic> extern std::atomic<int> i; void f(void) { while (!i.load(std::memory_order_relaxe...

4  Send() "Atomic"は成功していますか?  ( Is a successful send atomic ) 
send()を返した番号を返して、「部分的な送信」が発生していないサイズパラメータ保証に等しい数値に等しい数値が発生しますか? またはシステムコールの保守中にOSが中断され、データの一部を送信し、おそらく長時間待ってから、残りの戻り値を返しずに返されて戻って...

0  Redisにキーが存在する場合にのみチャンネルを購読する  ( Subscribe a channel only if a key exists in redis ) 
私のNodeJSアプリでは、私はRedisキーをチャンネル名として使用しています。対応するキーが存在する場合にのみ、クライアントがチャンネルを購読するようにします。問題は、existsコマンドとSubscribeコマンドの間にあるため、別のクライアントは既存の...

2  他の方法に送信しながら30秒ごとにGuava Cacheを空にする方法  ( How to empty guava cache every 30 seconds while sending it to another method ) 
add メソッドを呼び出して、私のGUAVAキャッシュを複数のスレッドから入力しています。今すぐ30秒ごとに実行されるバックグラウンドスレッドから、キャッシュ内にある sendToDB メソッドの原子的には何でも送信したいですか? は私のコードです: <事...

0  クラッシュ後のエージェントプログラムの再起動  ( Restarting agent program after it crashes ) 
分散型のバンクアプリケーションを検討します。分散型エージェントマシンは、グローバル変数の値を変更します。 "Balance" だからエージェントの要求はキューに入れられます。要求は、特定のエージェントの代わりに値がグローバル変数に追加される形式です。そのため...

12  Atomic 64ビットはGCCで書き込みます  ( Atomic 64 bit writes with gcc ) 
マルチスレッドプログラミングに関して混乱した混乱に入って、誰かが私の中で何度もやってくることを望んでいました。 かなりの読みを行った後、私は64ビットのシステム 1 にアトミックの値を設定できるようにすることができます。私はこの読書の多くを難しく見つけましたが...

0  REDIS多重確保  ( Redis multi ensuring atomicity ) 
は、1つのコマンドが失敗した場合、すべてのコマンドを「マルチ」トランザクションに障害にするためのRedisには存在します。 例えば <事前> <コード> <?php //using phpredis //connection made $redis->set...

1  これはJavaのAtomicReferenceの正しいユースケースですか?  ( Is this a correct use case for atomicreference in java ) 
私はシングルトンであるプロセッサキャッシュクラスを持っていて、 Processor フィールドを持っています。 Processor フィールドは、単一の e: .../android/app/build/generated/source/dataBindin...

5  アトミック操作を使用してロックします  ( Lock using atomic operations ) 
はい、私は以下の質問が「代わりにlockキーワードを使用する」または似たような質問に答えることができることを知っています。しかし、これはちょうど「楽しい」のためだけであるので、私はそれらを気にしません。 アトミック操作を使用して簡単なロックを作成しました: <...

111  参照割り当てはアトミックであるため、Interlocked.Exchange(Ref Object、Object)が必要なのはなぜですか?  ( Reference assignment is atomic so why is interlocked exchangeref object object ) 
マルチスレッドのASMX Webサービスでは、<コード> Dictionary<T> volatile Dictionary<T> で構成される自分のタイプのSystemDataのクラスフィールド_AllDataがありました。 >。システムデータ( _a...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有