web-dev-qa-db-ja.com

Scala-可変スレッドセーフコレクション

Scalaで変更可能なスレッドセーフマップと変更可能なスレッドセーフリストが必要です。不変コレクションはデフォルトでスレッドセーフであることを知っています。ただし、コレクションを頻繁に更新する必要があるため、不変のものを使用できませんでした。また、挿入順序を維持するには、スレッドセーフな可変マップが必要です。

現在、以下のマップを使用しています

val map = scala.collection.mutable.LinkedHashMap[String,Any]()

このマップは挿入順序を維持し、変更可能です。スレッドセーフにする方法を教えてください。

20
yAsH
  1. トピックを複製しています...
  2. 彼の答えのAlexIv で述べたように、スレッドセーフが必要な場合に混ぜることができる特性があります。ただし、別の方法があります。

    val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
    

各アクセスで同期するマップ が表示されます。簡単ですが、パフォーマンス要件を満たしていない可能性があります。その場合は、LinkedHashMapを拡張するカスタムクラスを作成し、 concurrent.Map trait(推奨されたとおり) および関連メソッドの実装を提供します。つまり、putIfAbsentremovereplace(2オーバーロード)。

18
Patryk Ćwiek

2018年以降にこれに来る人のための速いヒント:

import Java.util.concurrent.ConcurrentHashMap

val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap
17
akauppi