2

背景: Java に大きなスレッドプールがあり、各プロセスにはいくつかの内部状態があります。状態に関するいくつかのグローバルな情報を収集したいと思います-そのために、連想可換集約関数があります(たとえば、合計-プラグイン可能である必要があります)。

ソリューションは、メモリ消費量を固定し、プールをまったく妨害しないようにするのが最善の場合である必要があります。したがって、データ構造への書き込み時にスレッドがログを必要とする (または同期領域に入る) 必要はありません。集計値はスレッドが完了した後にのみ読み取られるため、常に正確な値は必要ありません。プールの完了後にすべての値を単純に収集して集計すると、メモリの問題が発生する可能性があります。値はより複雑なデータ型になるため、AtomicInteger などは使用できません。

解決策に関する私の一般的なアイデア: すべてのスレッドが更新を格納するログのないコレクションを用意します。イベントの順序さえ必要ありません。大きくなった場合は、スレッドがそれを埋め続けている間、その上で集計関数を実行します (圧縮します)。

私の質問: そのようなことを可能にするデータ構造はありますか、それともゼロから実装する必要がありますか? 私の問題に直接一致するものは見つかりませんでした。ゼロから実装する必要がある場合、どのノンブロッキング コレクション クラスから始めるのがよいでしょうか?

4

2 に答える 2