gpt4 book ai didi

scala - 如何处理对 Scala 集合的并发访问?

转载 作者:行者123 更新时间:2023-12-02 19:26:28 25 4
gpt4 key购买 nike

我有一个 Actor,其本质是维护一个对象列表。它具有三个基本操作:添加、更新和删除(有时从添加方法调用删除,但除此之外),并且适用于单个集合。显然,该后备列表是同时访问的,添加和删除调用不断地相互交错。

我的第一个版本使用了 ListBuffer,但我在某处读到它不适用于并发访问。我没有遇到并发访问异常,但我确实注意到,从中查找和删除对象并不总是有效,可能是由于并发性所致。

我正在一半地重写它以使用 var List,但是从 Scala 的默认不可变列表中删除项目有点痛苦 - 而且我怀疑它是否适合并发访问。

那么,基本问题:在并发访问情况下我应该使用什么集合类型,以及如何使用它?

(也许是次要的:Actor 实际上是一个多线程实体,还是这只是我的错误概念,它是否在单个线程中一次处理一个消息?)

(第三:在 Scala 中,哪种集合类型最适合插入和随机访问(删除/更新)?)

编辑:致善良的回复者:请原谅我迟到的回复,我正在养成一个讨厌的习惯,即在 SO 或邮件列表上转储问题,然后继续处理下一个问题,暂时忘记原来的问题。

最佳答案

看看 scala.collection.mutable.Synchronized* 特征/类。

这个想法是将 Synchronized 特征混合到常规可变集合中以获得它们的同步版本。

例如:

import scala.collection.mutable._
val syncSet = new HashSet[Int] with SynchronizedSet[Int]
val syncArray = new ArrayBuffer[Int] with SynchronizedBuffer[Int]

关于scala - 如何处理对 Scala 集合的并发访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com