問題タブ [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.putifAbsent が安全なのはなぜですか?
私は昨日から並行性について読んでいて、多くのことを知りません...しかし、いくつかのことが明らかになり始めています...
ダブルチェックロックが安全ではない理由を理解しています(まれな状態が発生する可能性は何ですか)が、 volatile は 1.5 + で問題を修正します....
しかし、これはputifAbsent
お気に入り...
次に、これにより、myObj
別のスレッドがcHashM.get()
???を実行したときに 100% 初期化されることが保証されますか 参照が完全に初期化されていない可能性があるため(ダブルチェックロックの問題)
java - 短絡演算子のように putIfAbsent を使用する
putIfAbsent または短絡演算子のような同等のものを使用することは可能ですか?
計算値が既に存在する場合は、再度計算しないでください。デフォルトでは、 putIfAbsent は、実際に値を再度保存することはありませんが、毎回計算を行います。
java - concurrntHashMapは、真のスレッドセーフと同時実行性を同時に保証できますか?
ConcurrentHashMapは、パフォーマンスを向上させるために複数のスレッドへの同時アクセスを提供できることを知っています。このクラス内では、セグメントが同期されます(私は正しいですか?)。質問は、この設計はスレッドの安全性を保証できるかということです。ConcurrentHashMapインスタンスの同じキーによってマップされたオブジェクトにアクセスして変更する30以上のスレッドがあるとしましょう。私の推測では、それらはまだそのために整列する必要がありますね。
「JavaConcurrencyinPractice」という本には、ConcurrentHashMapが同時読み取りと適切なレベルの同時書き込みを提供すると書かれているという私の記憶から。前述のシナリオで、私の推測が正しければ、コレクションの静的同期ラッパーAPIを使用するよりもパフォーマンスが向上することはありませんか?
明確にしてくれてありがとう、ジョン
java - 静的ConcurrentHashmapには外部同期が必要ですか?
静的ConcurrentHashmapは、同期ブロックまたはロックを使用して外部的に同期する必要がありますか?
java - HashMap が壊れている/パフォーマンスの問題
現在、私は HashMap を実装しています
Item はプロパティ Date expireTime および byte[] データを持つオブジェクトです
このマップは、複数のスレッドが同時にヒットし始めたときに使用されます。私が行うチェックは
1.
2. データが null で返された場合は、データを作成して hashMap にキャッシュします
複数のスレッドが say キー (この場合は url) にアクセスすると、同じキーの場所でデータがキャッシュに複数回追加されるようです [ハッシュマップが最初のスレッドのデータの書き込みを終了していないため、複数のスレッドに対して getCacheData が null を返すため]
問題を解決する方法について何か提案はありますか?
java - ConcurrentHashMap$HashEntry の「次の」フィールドが final である理由
java.util.ConcurrentHashMap のソース コードを読んでいるとnext
、ConcurrentHashMap$HashEntry のフィールドが final であることがわかります。next
:add と removeの値を変更できる操作は 2 つあります。next
しかし、これらの 2 つの操作は、フィールドが最終的なものでなくてもスレッドを安全に実行できます。なぜnext
フィールドが最終的なのか理解できません。誰か教えてもらえますか? ありがとう。
java - キーが一意であることが保証されている場合の HashMap のパフォーマンス
使用したいキーが一意であることが保証されている場合 (または、少なくともキーが一意であると仮定できる場合)、「バニラ」ConcurrentHashMapを使用すると最高のパフォーマンスが得られますか、またはハッシュ関数または put メソッドを使用する必要がありますか?不必要なハッシュを避けるために変更されますか?
また、数値キーには、数値以外のキー (適切なハッシュ関数を使用した文字列や POJO など) よりもパフォーマンス上の利点がありますか?
java - 同じメソッドで ConcurrentHashMap と Synchronized ArrayList を変更する
あるスレッドによって変更され、別のスレッド (具体的には EDT) によって読み取られるオブジェクトのコレクションがあります。高速なルックアップと高速なインデックス作成 (挿入された順序による) を可能にするソリューションが必要だったので、キーの ArrayList を伴う ConcurrentHashMap を使用しています。キーを取得し、返されたキーを使用してハッシュ マップから値を取得します。したがって、いつエントリが追加され、マッピングがハッシュマップに追加され、キーがリストに追加されるかを確認するラッパークラスがあります。削除の場合も同様です。
問題のコードの例を投稿しています:
私の質問は次のとおりです。同期メソッドで操作することにより、ConcurrentHashMap (同期ハッシュマップを介して) を使用することのすべての利点を失っていますか? キーのArrayListを安全に変更/読み取るためにメソッドを同期する必要があります(多くの変更が発生するため、CopyOnWriteArrayListはオプションではありません...)また、これを行うより良い方法を知っていれば、それはありがたいです。 ..
java - RestEasyとTomcatを使用してMessageBodyWriterをHashMapで動作させるにはどうすればよいですか?
私はRestEasy2.2.2を使用してJAX-RSWebサービスを開発してTomcat7にデプロイしています。サービスはJAXBを使用してXMLを返します(返す必要があります)。返されるXMLには、次のコードで使用されているのと同様のConcurrentHashMapの表現が含まれている必要があります。
このItem
クラスには、ConcurrentHashMap
XMLにシリアル化する必要のあるも含まれています。
これはリソースクラスです:
このコードは実行されますが、コンテンツのないXMLが生成されます。
私が出力として取得しようとしているのは、次のようなものです。
MessageBodyWriter
組み込みの機能が不十分な場合は、実装が必要であることがわかりました。MessageBodyWriter
をマーシャリングするための実装を考え出そうとしましたがConcurrentHashMap
、これまでは機能させることができませんでした(つまり、呼び出されるコードを取得できますが、さまざまな例外を除いて停止します)。
インターフェースをどのようにMessageBodyWriter
(そして)どのように実装して使用すべきかを私は完全には理解していないようです。MessageBodyReader
BillBurkeの「RESTfulJavawithJAX-RS」の本を持っています。JAX-RSサービスの設計に役立つという点では非常に便利ですがMessageBodyWriter
、関連するセクションで機能に関する十分な詳細を見つけることができませんでした。私のインターネット検索でも、私を正しい方向に導くことができるものは何も得られませんでした。
MessageBodyWriter
(およびMessageBodyReader
)インターフェースを適切に実装する方法を誰かが理解するのを手伝ってくれれば幸いです。注釈が欠落しているのか、置き忘れているのか、まったく新しいアプローチが必要なのかはわかりません。
助けてくれてありがとう。
編集:
コードを次のように変更すると、途中で次のようになります。
これにより、必要なXMLが生成されます(上記のサンプルが含まれています)。ただし、このコードは、アンマーシャリングに関しては機能しません。次の例外が発生します。
その理由は、アンマーシャラーがアイテムをに追加しようとしないように「適切なセッター」がないためCollection
だと思いますが、そのセッターがどのように見えるかはわかりません。誰かがこれを行う方法を知っているなら、私は助けていただければ幸いです。
前もって感謝します。
編集2:
ところで、私は彼が使用することを提案するクリスの返事を見@XmlJavaTypeAdapter
ました。私は提案を試しましたが、必要なXMLに近づきました。ただし、@ XmlJavaTypeAdapterを使用して取得したXMLには、追加のレベルがあります(私の例で見られるように、インスタンス<class><items><item>
の代わりに、クラスのメンバー変数としてインスタンスがあります)。また、個々のマップアイテムの要素名を変更できないようです(これらは常に「アイテム」と呼ばれます)。<items><item>
ConcurrentHashMap
これらは大きな問題ではなく、必要な変更を加えて、必要に応じて一緒に暮らすことができます。でも、できればそもそも持っていたくないです。教育目的で、EDIT 1のコードがアンマーシャリングで機能しない理由(および可能であれば修正方法)も理解したいと思います。
すべての助けを事前に感謝します。
java - ConcurrentWeakKeyHashMapisEmptyメソッド
以下は、ConcurrentWeakKeyHashMap.javaのisEmpty()メソッドです 。https://github.com/netty/netty/blob/master/src/main/java/org/jboss/netty/util/internal/ConcurrentWeakKeyHashMap.java
なぜmcsumが必要なのですか?if(mcsum!= 0){..}ブロックは何をしますか?
そしてもっと重要なのは、どうすれば取得できますか
真に評価するには?
編集:ブロックが現在ConcurrentWeakKeyHashMapTest にある場合に上記を評価するコード
基本的に、1つのスレッドがconcurrentMapを継続的に監視し、別のスレッドが同じキーペア値を継続的に追加/削除します