Java 6 APIでこのデータ構造を見たばかりですが、いつ役立つリソースになるのか知りたいです。私はscjp試験の勉強をしていますが、それについて言及している模擬試験の質問を見たにもかかわらず、キャシー・シエラの本でそれがカバーされているのを見ていません。
Java 6 APIでこのデータ構造を見たばかりですが、いつ役立つリソースになるのか知りたいです。私はscjp試験の勉強をしていますが、それについて言及している模擬試験の質問を見たにもかかわらず、キャシー・シエラの本でそれがカバーされているのを見ていません。
回答:
ConcurrentSkipListSetとConcurrentSkipListMapは、複数のスレッドによってアクセスされるソートされたコンテナーが必要な場合に役立ちます。これらは基本的に、並行コードのTreeMapおよびTreeSetと同等です。
JDK 6の実装は、IBMのMaged Michaelによる高性能動的ロックフリーハッシュテーブルとリストベースのセットに基づいています。これは、コンペアアンドスワップ(CAS)操作を使用してスキップリストに多くの操作をアトミックに実装できることを示しています。これらはロックフリーであるため、synchronized
これらのクラスを使用するときに(ほとんどの操作で)オーバーヘッドを心配する必要はありません。
現在、Javaには赤黒木ベースの同時マップ/セット実装はありません。文献を少し調べて、同時RBツリーがスキップリストよりも優れていることを示すいくつかの 論文を見つけましたが、これらのテストの多くはトランザクションメモリを使用して行われ、現時点では主要なアーキテクチャのハードウェアではサポートされていません。
実装がよく知られていて、ロックフリーにするのが簡単でポータブルだったので(CASを使用して)、JDKの人たちはここでスキップリストを使用したと思います。誰かが明確にすることを気にかけているなら、してください。私は興味がある。
これらは、複数のスレッドから同時に安全にアクセスできるセットが必要な場合に役立ちます。また、一貫性が弱いため、適切なパフォーマンスが得られます。セットを反復処理している間、挿入を安全に行うことができますが、イテレーターがその挿入を認識する保証はありません。