作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
@volatile var aVector = Vector(1, 2, 3)
aVector +:= getAnInt()
aVector match {
case head +: tail =>
doSomethingWith(head)
aVector = tail
case _ =>
}
最佳答案
简短的回答:不。+:=
不是原子操作,也是解构+:
和任务。
因此,当一切都出错时,您可能会遇到两种情况:
var
),第一个线程重新分配 var
带有附加的向量。 var
带有没有第一个元素的值。 @volatile
的一些说明以及对不可变集合的操作。
@volatile
基本上是java的volatile关键字。在这种情况下,它会分配
var aVector
原子并在其他线程中立即可见,但它不会使(读取 - 更新 - 分配操作)序列成为原子或同步。
@volatile var aVector = Vector(1, 2, 3)
aVector +:= 1
public final class _$$anon$1 {
private volatile Vector<Object> aVector = package$.MODULE$.Vector().apply(Predef$.MODULE$.wrapIntArray(new int[] { 1, 2, 3 }));
private Vector<Object> aVector() {
return (Vector<Object>)this.aVector;
}
private void aVector_$eq(final Vector<Object> x$1) {
this.aVector = x$1;
}
{
this.aVector_$eq(this.aVector().$plus$colon(BoxesRunTime.boxToInteger(1), Vector$.MODULE$.canBuildFrom()));
}
}
关于scala - 给定的代码线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31739808/
我是一名优秀的程序员,十分优秀!