問題タブ [concurrentskiplistmap]
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 - コンカレントスキップリストマップを正しく使用する方法は?
同時スキップリストマップを使用しようとしています。同期されたリンクされたハッシュマップを正しく使用する方法に問題があったので、同時スキップリストマップを試してみることにしました。
私も同じような問題を抱えています。以下の単体テストは失敗します。これは、エントリセットを取得したときに、size()がマップが空でないことを示している場合にnull値が含まれるためです。naict、私は同期されたマップへのすべてのアクセス権を持っています。
これは並行マップなので、これを(同期して)行う必要はないと思います。
サーバーは、数値0、1、2、3、...をマップに配置し、サイズをしきい値未満に保ちます。サーバーが起動してから経過したミリ秒ごとに1つの数値を入力しようとします。
任意のポインタをいただければ幸いです。
ありがとう
java - 値でソートされたJava同時マップ
キーではなく値でソートできる同時マップまたは同様のキー - >値ストレージを使用する方法を探しています。
これまでConcurrentSkipListMapを見ていましたが、メソッドがパラメーターとしてキーのみを受け取るため、( Comparatorを使用して)値で並べ替える方法が見つかりませんでした。compare
マップには、文字列のキーと整数の値があります。私が探しているのは、最小値(整数)でキーを取得する方法です。
また、2 つのマップを使用して、整数キーと文字列値を使用して別のマップを作成することも考えていました。このようにして、必要に応じて整数でソートされたマップが作成されますが、同じ値を持つ整数が複数存在する可能性があります。私をより多くの問題に導く可能性があります。
例
"user1"=>3 "user2"=>1 "user3"=>3
ソート済みリスト: "user2"=>1 "user1"=>3 "user3"=>3
これを行う方法はありますか、またはこれを行うことができるサードパーティのライブラリはありますか?
ありがとう
java - ConcurrentSkipListMap / ConcurrentSkipListSetのキーを並べ替える原子的な方法は?
この投稿の概要:注文されたアイテムのセットがあり、その注文は時間の経過とともに変更される可能性があります。複数のスレッドからこのセットを反復処理できる必要があります。各スレッドは、アイテムの順序も更新する必要がある場合があります。
たとえば、複数のスレッドはString
、任意の並べ替えられた順序でキーにアクセスする必要があります。これらの文字列は、自然順序ではなく、変更される可能性のあるいくつかの値(したがって、カスタムComparator
)によって並べ替えられます。私の最初の実装は、を使用しTreeSet
て同期することでした。キーのいずれかを並べ替える必要がある場合、スレッドはマップからキーを削除し、比較値を更新して、キーを再挿入します。これを実装するために、キーはネイティブですString
が、コンパレータは値にアクセスできます。これは、キーの順序が時間の経過とともに変化する可能性がある奇妙な配置ですが、変更されたキーは常に削除され、変更されると再挿入されるため、機能しているように見えます。String
( sが別のオブジェクトにラップされている場合にも機能すると思います。)
私は最近、基本的にスレッドセーフなソートされたセット(またはマップ)であるConcurrentSkipListSet
/ConcurrentSkipListMap
実装に気付きました。データ構造全体をロックすることなく、キーを反復処理できるようになりました。ただし、上記で行った操作のように、キーをアトミックに削除して別のキーに置き換える方法はありますか?これにより、他の反復スレッドがアイテムを見逃さず、synchronize
ブロックを使用する必要がなくなります。
誰かがこのタイプの操作のためのより良いデータ構造を提案することができれば、私もすべての耳です!
java - Java - ConcurrentSkipListMap でスレッドを同期することは許容されますか?
多くのスレッドがリクエストを に投稿するプログラムがありますPriorityQueue
。その後、 からの応答を待ちConcurrentSkipListMap
ます。への回答を公開する 1 つのスレッドがありますConcurrentSkipListMap
。
次のコード行は、これを示しています。
プログラムの初期化時
呼び出し元スレッドで
THE 応答ハンドラ スレッド内
質問
- で呼び出し元スレッドと応答ハンドラ スレッドを同期しても安全
ConcurrentSkipListMap
ですか? - 同期にはロックを使用する必要がありますか?
HashMap
のロック ( )を使用する必要がありHashMap<Long,Object>
ますか?
私は java.util.concurrent API にかなり慣れていないので、いくつか疑問があります...
java - SortedMap の先頭から複数のアイテムを削除するパフォーマンス
私はJavaで作業しており、ConcurrentSkipListMapとして実装されているSortedMapを持っています。SortedMap の先頭からいくつかの項目を削除する必要があります。つまり、キーがしきい値よりも小さいすべての項目です。実際に削除されるアイテムの数は、0、1、または複数になる可能性があります。これにより、SortedMap 全体のすべてのアイテムが削除される可能性はありますが、ほとんどありません (つまり、少なくとも 1 つのアイテムがしきい値より大きくなる可能性は非常に高いですが、保証されていません)。
1) 削除する項目が連続しており、2) 削除する最初の項目が SortedMap の先頭であるという仮定を利用できるため、これをかなり効率的に行う方法があるはずです (そして#1に従って、残りはその後連続して続きます)。独自のスキップ リストを作成する場合、これは非常に簡単に行うことができますが、怠け者であり、組み込みの ConcurrentSkipListMap で既に提供されているすべてのロジックを再構築して、この 1 つのカスタム操作を実行したくありません。私の質問は、ConcurrentSkipListMap を使用しているときに、これらの仮定をパフォーマンスのためにどのように利用できるかということです。
私は次の方法を思いつきましたが、それらが本当に私の仮定を利用しているかどうかはわかりません:
方法 1: しきい値に達するまでアイテムを削除して繰り返します。
方法 2: 最初のアイテムがしきい値を超えるまで、最初のアイテムを繰り返し削除します。
方法 3: head からしきい値までのエントリのセットを取得し、それらをすべて削除します。
方法 4: #3 のより洗練されたバージョン。
java - Java ConcurrentSkipListMap ketset を配列に
次の行を使用して、 ConcurrentSkipListMap からキーの配列を取得しようとしています:
しかし、うまくいきませんでした。結果配列のすべての項目が同じです。なぜですか?
java - マップのマップを作成しようとしたときの互換性のない型エラー
を使用してマップのマップを作成しようとしていますConcurrentSkipListMap
。簡単なマップの例を作成すると、問題ないようです。
マップのマップを作成しようとすると、Incompatible types
エラーが発生します。
定義を切り替えて a を含めるConcurrentSkipListMap
と、問題なくコンパイルされます。
Map
インターフェイスを使用してマップのマップを定義できないのはなぜですか?
java - 値に基づいて同時ソートマップを作成する方法は?
パラメータを使用して並行マップを作成する必要があり<String, AtomicLong>
ます。マップはその値に基づいてソートする必要がAtomicLong
あります。
問題ConcurrentSkipListMap
は、値に基づいてマップをソートできないことです。TreeMap は並行データ構造ではありません。
挿入の複雑さが と のようになるO(log(n))
ようなデータ構造を探しています。また、値は一意ではないため、 に同じ数値を持つ複数のマップ エントリが存在する可能性があります。TreeMap
ConcurrentSkipListMap
AtomicLong