問題タブ [concurrenthashmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 安価なもの: 単一の ConcurrentHashMap の n イテレーターまたは HashMap の n インスタンスを使用したトラバーサル
生産者と消費者のシナリオを想像してみてください。スレッド A がエントリを生成し、他の複数のスレッドがそれらを消費します。
このために、一連のエントリを各コンシューマ スレッドに渡しています。
これを行うと、安価かどうかを自問しています(CPU使用率の意味ではプライマリ、メモリではセカンダリ):
- 各コンシューマー スレッドに の個別のインスタンスを提供します
HashMap
。Map
を 1 つのコンシューマーに渡した後、意志の新しいインスタンスMap
が作成され、次に生成されたエントリを次のスレッドに渡すために使用されます。
また
- シングルを使用し、コンシューマ スレッドごとに
ConcurrentHashMap
を作成し、をスレッドに渡した後、 - をクリアして、各 Iterator に基になる の独自のビューが含まれるようにします。Iterator
Iterator
Map
Map
どう思いますか?多かれ少なかれ一般的な答えは可能ですか?
それとも、エントリ数、スレッドなどのいくつかの変数に強く依存していますか?
編集:または、これらの種類の問題をより適切に解決できる他の種類のデータ構造を使用する必要がありますか?
java - 高速データ フローからのマップの更新
update(key, value)]
メソッド [が を更新するマルチスレッド Java アプリケーションがありますConcurrentHashMap
。キーごとに、マップに配置できるよりも多くの値が受信されるため、キーが更新されると、待機中のスレッドの最新の値のみを使用して、マップを再度更新する必要があります。それとも、待機中のスレッドが 1 つしかない場合に使用できるある種のロックがあるかもしれません - 最後にロックに到達したスレッド (既に待機しているスレッドを事実上破棄します)。マップ全体がロックされていないことが重要です。そのため、HashMap
キー A で待機しているスレッドが存在する場合でも、キー B は更新されない限りキー B を更新できるようにする必要があるため、法線の周りで同期ブロックを使用していません。スレッドは、B に格納された値をすでに更新しています。
もっと簡潔に言えば、キーと値のペアが更新よりも速く受信されているマップを、最後に受信した値を次の更新として使用して更新するにはどうすればよいでしょうか? したがって、A が 1 に更新されるときに、5、3、6、8 の値が受信されます。これは、A の次の更新が 8 になることを意味します。
java - 「CopyOnWriteArrayList」と「ConcurrentHashMap」はシリアル化できますか?
RMIを使用してクラステレポートを実行していますが、これらのスレッドセーフオブジェクトをシリアル化できるかどうかわかりません。以前に試したことはありますか?
UPDATE skaffmanは「はい」と言っていますが、シリアル化に失敗しました。
これは私がテレポートするクラスです。
これはクラスですWhatzNewEntry
skaffmanは正しいかもしれませんが、ここで何が間違っているのでしょうか?
java - db 値による Java 同期
コードが与えられ、ユーザー名とサービスの種類に基づいて一意の ID が作成されます。一意の ID は db にあり、db は表示できない DAO クラスを介して読み取られます。IDを作成するには多くの手順が必要です。
マルチスレッド環境では、一意の ID は保証されません。
唯一性を保証するために
解決策: userId+service をキーとして、id を値として ConcurrentHashmap に id をキャッシュします。メソッドが呼び出されるたびに、キーにロックが存在しない場合は値(id)をチェックし、id を作成します。これにより、競合が減少し、一意性が保証されます。
私のソリューションに問題があるかどうか、および/またはこれに対するより良い解決策があるかどうか疑問に思っていますか?
java - ConcurrentLRUCache/HashMap はディスクにアクセスしますか?
キャッシュをウォームアップしている間、多くのディスク アクティビティが発生します。org.apache.lucene ConcurrentLRUCache がそれを実行しているかどうかを判断できませんか? (問題のクラスは Java ConcurrentHashMap を使用します)。
ティア・ルネ
java - javaconcurrenthashmap置換メソッドに関する質問
私は次のコードを持っています
出力はどちらもnullです。1秒じゃないですか?
java - ConcurrentSkipListMapの利点は何ですか?
つまり、JavaライブラリにConcurrentSkipListMapがある場合、ConcurrentHashMapよりも優れている場合があります。ConcurrentSkipListMapはどこで本当に良いのだろうか?
java - ConcurrentHashMap.putIfAbsentのパフォーマンス
54:15のEffectiveJavaに関する彼の講演で、Joshua Blochは、パフォーマンスと並行性を向上させるために、get
以前に使用することを推奨しています。putIfAbsent
これは、なぜこの最適化がすでに組み込まれていないのかという疑問につながります
java - nullキー機能を備えたスレッドセーフマップ
Webサーバーのキャッシュで使用するマルチスレッドのMapオブジェクトが必要であり、null
キーが必要です。
HashMap
nullキーを使用できますが、できConcurrentHashMap
ません。HashMap
同期バージョンのusingを作成しようとしましたが、キーもCollections.synchronizedMap(new HashMap())
受け入れません。null
null
キーをラップする方法を実装せずに使用できる代替手段はありますか?
java - グアバの地図での立ち退きの怠惰
マップの現在の排除アルゴリズムは非常に怠惰です。期限切れのオブジェクトは、データ構造にアクセスした場合にのみ削除されるようです。
たとえば、アドレスからインデクサーへのマップは次のように定義されます。
非常に驚くべきパターンにつながりcontainsKey()
ます。指定されたアドレスに対してfalseが返されますが、そのアドレスのインデクサーが削除された直後です。
クリーンアッププロセスをよりリアルタイムにするために推奨されるアプローチは何でしょうか?つまり、実際の有効期限に近いオブジェクトを削除します。
更新:リアルタイムとはどういう意味かをもっと明確にしたいと思います。上記の例では、EXPIRATIONが10秒であるため、最後にアクセスしてから10秒後に挿入されたオブジェクトが削除されることを確認したいと思います。それは今は起こっていません-マップは、立ち退きを開始するために何らかの方法で使用する必要があります。マップが完全に使用されていない場合、オブジェクトは何年もそこにとどまることができます。