我有一些工人演员和一个任务列表(一个链接列表),它是由主演员发送给工人。链表的每个元素都有一个布尔标志,用于指定该元素是否已被工作线程获取。如果没有,工作线程将该标志设置为selected,并开始处理该元素。当参与者完成操作后,该元素将检查列表元素中是否有下一个未选择的元素。工人将继续工作,直到列表中没有元素可以继续工作。我的问题是设置标志以显示元素被选中的最佳方式。我正在考虑使用AtomicBoolean标记来自动检查和设置它。但我不知道如何在scala中使用AtomicBoolean。请告知
您可以导入Java的AtomicBoolean并像往常一样使用它:
scala> import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicBoolean
scala> val ab = new AtomicBoolean(false)
ab: java.util.concurrent.atomic.AtomicBoolean = false
我会重新考虑设计,尽管-演员通常不需要在任何机制上同步,除了他们的队列/收件箱。如何:
- 主actor在worker actor之间分配工作单元
- 工作actor处理单元并将准备好的比特发送给累加actor
- accumulator actor收集准备好的结果并输出一个列表。