2017-08-08 9 views
0

scala TrieMapはTrieMapを反復処理するときにイテレータをconsistentに生成すると言いますが、私はconsistentが本当に意味することを理解していません。scala TrieMapとJava ConcurrentHashMapの相違点

オブジェクトプールを構築するにはコレクションが必要です。つまり、プール内のオブジェクトは同時に借用/解放されます。その間、スケジュールされたスレッドはこのコレクションを反復して、存在する場合は、新しいコレクションを作成して、古いコレクションをコレクションから削除します。

scala TrieMapをプールとして使用できるかどうか評価しています。

また、scala TrieMapJava ConcurrentHashMapの違いを説明するコードをいくつか表示できますか?

+0

です>私は本当にここの手段を一貫性のある何を理解していません。 次の質問には、一貫性のあるイテレータの詳細があります。 https://stackoverflow.com/questions/29499381/what-is-a-triemap-and-what-is-its-advantages-disadvantages-compared-to- a-hashmap – FabFlying

+0

イテレータが一貫しているということは、スナップショットを要求した時点での「TrieMap」のスナップショット、またはイテレータを提供できることを意味します。あなたが 'ConcurrentHashMap'から得た保証を読んだら、以下のように言います:*イテレータと列挙は、ハッシュテーブルの状態を反映する要素を返す**イテレータ/列挙***の作成時以降、あなたが何を望んでいるかわからない。また、 'TrieMap'のイテレータは、検索するのが非常に速くなければなりません(O(1))。 –

答えて

0

TrieMap.getOrElseUpdateは、提供された操作を複数回実行することができますが、ConcurrentHashMap.computeIfAbsentはすべてのスレッドで1回だけ実行されることを確認するためにロックを行います。

あなたは以下のコード試すことができます。

(0 to 1000) map { _ => 
    Future { 
    Thread.sleep(100) 
    map.getOrElseUpdate(1, { 
     Thread.sleep(100) 
     counter.incrementAndGet() 
    }) 
    } 
} 

とカウンタはおそらく1ではありませんが、concurrentHashMapと試みたとき、それは1

関連する問題