我不确定我在这里正确使用@volatile
。我有一个缓冲区,像这样:@volatile用法不清楚 - 用`var`向另一个线程发送一个对象
final class BufD(val buf: Array[Double], @volatile var size: Int)
哪些在进程之间发送,从而它可能跨越线程边界。在发送之前,发件人可能会更新size
字段。因此,我想确保接收器在任何情况下都不会在此处看到陈旧的size
值。 第一个问题:@volatile
确保这个或者是多余的?
现在我介绍一个特点:
trait BufLike {
@volatile var size: Int
}
final class BufD(val buf: Array[Double], @volatile var size: Int) extends BufLike
这给了我一个编译器警告:
警告:(6,4)对方法尺寸标注没有有效的目标 - 它被丢弃没用过。您可以使用元注释指定目标,例如@(挥发性@Getter)
@volatile var size: Int ^
第二个问题:我应该删除@volatile
这里或改变它以不同的方式?
你为什么不只是使用一成不变的案例类+'.copy()'? – Tair
示例:http://alvinalexander.com/scala/scala-case-class-copy-method-example – Tair
@tair因为这是高速DSP代码,我宁愿尽可能避免不必要的分配。 –