我不確定我在這裏正確使用@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代碼,我寧願儘可能避免不必要的分配。 –