問題タブ [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.put VS ConcurrentHashMap.replace
私が知っているJavadocからConcurrentHashMap.replace
はアトミックですが、どうConcurrentHashMap.put
ですか? ソースコードでの実装が異なっていることがわかりますが、それらの違いを理解することはできません。これら 2 つの方法の使用方法に関するガイドラインを提供する専門家はいますか?
java - JavaコントローラーでのHashMapまたはConcurrentHashMap?
ここで説明されているように:JavaのConcurrentHashMap?Javaでの並行ハッシュマップはスレッドセーフです。JavaコントローラーはWeb要求用であり、Webから同時に呼び出すことができます。
私の質問は次のとおりです。Javaでハッシュマップの代わりに同時ハッシュマップを使用する必要がありますか?
java - 異種マップでジェネリックを使用する方法は?
次のように使用するのに役立つユーティリティメソッドがありますConcurrentMap.putIfAbsent
。
今、私はそのような異質なマップに対処しなければなりません:
それにハンドラを追加するメソッド:
これまでのところは問題ありませんが、クラスを処理しようとすると問題が発生します。たとえば、次のようになります。
ただし、次のコードはコンパイルされません。
を使用するとコードはコンパイルhandler.handle((Class) c)
されますが、未チェックの警告が表示されます。注釈を追加することはできますが@SuppressWarnings("unchecked")
、他に良い方法がなければこれが最後の選択肢になります。
この問題について何か考えはありますか?
java - ConcurrentHashMap に対する Hashtable の特定の使用法
ConcurrentHashMap
一部の Javajava.util.concurrent
パッケージとして 1.5 で導入されました。threadsafe
それ以前は、マップを取得する唯一の方法はHashTable
またはを使用することでしたCollections.synchronizedMap(Map)
。
すべての実用的な目的 (マルチスレッド環境) では、スレッドがマップの均一なビューConcurrentHashMap
を必要とする 1 つのケースを除いて、ニーズに対処するのに十分です。
私の質問は、マップの統一ビューを持っていることとは別に、それがConcurrentHashMap
オプションではない他のシナリオはありますか?
java - スレッド オブジェクト出力ストリーム オブジェクト入力ストリーム ブロッキングが読み取れない
私のコードは病気です。かなり単純なオブジェクトの書き込みおよび読み取り操作のように見えますが、その二次操作を起動することはありません。リモート ピアの内部クラス スレッドはConcurrentHashMap
、OOS を介して を送信します。
それが到着すると、受信コードはブール値で決定されたループで、その CCHM の更新を OIS でリッスンし続けます。これらの更新は、元の CCHM を送信した兄弟から送信されます (受信ピアごとに 1 つのサービス提供兄弟が存在します)。これらObjectOutputStreams
の兄弟が使用するものHashMap
は、兄弟の表示から取得されます。兄弟は、グループの新しいメンバーに送信するか、既存のメンバーに送信するかは気にしません。ピアが新規か既存かの違いは、元の CCHM が受信されて使用される受信ピア側でのみ認識され、コードは同じ OIS で更新を待ち続けます。参加する新しいピアの詳細は、リモートのHashtable
したがって、送信される CCHM は、すべてのピア (新しいものと既存の n 個) に送信されるたびに 1 要素大きくなります。
ただし、既存のピアは更新された CCHM を受信しません。コードを呼び出しでいっぱいにしSystem.out.println()
たり、大まかに停止したりするのではなく、この混乱の中で見落としがちな落とし穴は何ですか?
java - 同時ハッシュマップの使用
次のコードでハッシュマップを反復した後に取得した値にアクセスできるかどうか疑問に思っています(マップに格納されていることはわかっていますが、ループの外で使用したい)。キーと対応する値は、ループ内で繰り返されます。同時ハッシュマップは、値を取得してループ外で使用するのに役立ちますか?
ありがとうございました。
java - ConcurrentHashMapとReentrantReadWriteLockベースのリロード用カスタムマップ
Java Gurus、
現在、頻繁HashMap<String,SomeApplicationObject>
に読み取られ、時々変更されるがあり、変更/再ロード中に読み取り操作が返されるという問題がありますが、null
これは受け入れられません。
これを修正するには、次のオプションがあります。
A.ConcurrentHashMapを使用します
これは最初の選択肢のように見えますが、私たちが話している操作はreload()
-という意味でclear()
、その後に。が続きreplaceAll()
ます。したがって、Map
がpostclear()
およびprereplaceAll()
で読み取られた場合、nullが返されますが、これは望ましくありません。私がsynchronize
これで問題が解決しない場合でも。
B.ReentrantReadWriteLockに基づいて別の実装を作成します
Write Lock
操作前に取得を作成する場所reload()
。これはより適切に思えますが、これにはすでに何かが利用可能であるに違いないと感じており、車輪の再発明をする必要はありません。
最善の方法は何ですか?
編集そのような機能を備えたコレクションはすでに利用可能ですか?
java - HashMapの使用方法に関する設計の実装
GUIでアカウントを表示する場合、プライマリアカウントを表示する必要があります(セカンダリアカウントの場合)。プライマリアカウントごとに複数のセカンダリアカウントが存在する可能性があります。
プライマリアカウントからセカンダリアカウントの情報をHashMapに保存しようとしています。なぜなら、それは後で取得する必要があるからです。
保存中に、セカンダリアカウントの指示も保存する必要があります。したがって、プライマリアカウントとしてキーを使用して2つのオブジェクトを保存する必要があります。
アカウントオブジェクトと命令オブジェクトのequalsとハッシュコードがオーバーライドされています。
プライマリアカウントのハッシュコードをキーとして使用し、値をオブジェクトのリストとして使用しようとしています[2]
-初期化
-値を置く
これが正しいかどうか、そしてそれを行うためのより良い方法があるかどうか疑問に思っています。提案してもらえますか?
java - このコードはスレッドセーフなコードですか?
クライアントリクエストのフローを処理したい。各リクエストには特別なタイプがあります。まず、そのタイプのデータを初期化する必要があります。その後、リクエストの処理を開始できます。クライアントタイプが初めて来るときは、対応するデータを初期化するだけです。この後、そのタイプの以下のすべてのリクエストは、そのデータを使用して処理されます。
これをスレッドセーフな方法で行う必要があります。
これが私が書いたコードです。スレッドセーフですか?
一方では、ConcurrentHashMapは同じAに対してmap.put(A、B)== nullを2回生成できません。他方では、割り当てと比較の操作はスレッドセーフではありません。
それで、このコードは大丈夫ですか?そうでない場合、どうすれば修正できますか?
更新:Martin Serranoのコードはスレッドセーフであり、初期化の二重の問題が発生しにくいため、私はMartinSerranoの回答を受け入れました。ただし、私のバージョンでは問題が見つからず、以下の回答として投稿されており、私のバージョンでは同期が必要ないことに注意してください。
java - Jetty の共有 HashMap
現在、Jersey と Jetty が組み込まれた単純な REST インターフェイスを構築しています。
私のリソースでは@GET, @PUT, @DELETE
、すべてハッシュマップからオブジェクトを取得/配置/削除するメソッドを定義しています。
HashMap
現在、リソース クラスで をstatic として定義していますConcurrentHashMap
が、これまでのところ問題なく動作しています。
ただし、HashMap
潜在的な他のリソースやサーブレットにアクセスできるようにする予定です。
したがって、より広い範囲のアプリケーション コンテキストに追加する必要があります。
よくわかりませんが、これをどのように行うのが最善でしょうか?
理想的にはプログラム的に。
(jetty.webapp に WebAppContext があることを確認しましたが、これが正しい方法かどうかはわかりません)。