Scalaで変更可能なスレッドセーフマップと変更可能なスレッドセーフリストが必要です。不変コレクションはデフォルトでスレッドセーフであることを知っています。ただし、コレクションを頻繁に更新する必要があるため、不変のものを使用できませんでした。また、挿入順序を維持するには、スレッドセーフな可変マップが必要です。
現在、以下のマップを使用しています
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
このマップは挿入順序を維持し、変更可能です。スレッドセーフにする方法を教えてください。
彼の答えのAlexIv で述べたように、スレッドセーフが必要な場合に混ぜることができる特性があります。ただし、別の方法があります。
val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
各アクセスで同期するマップ が表示されます。簡単ですが、パフォーマンス要件を満たしていない可能性があります。その場合は、LinkedHashMap
を拡張するカスタムクラスを作成し、 concurrent.Map
trait(推奨されたとおり) および関連メソッドの実装を提供します。つまり、putIfAbsent
、remove
replace
(2オーバーロード)。
2018年以降にこれに来る人のための速いヒント:
import Java.util.concurrent.ConcurrentHashMap
val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap