对于以下课程,使mNumSides
最终的含义是什么? “线程安全性”受到影响吗?
class Shape {
private int mNumSides;
public Shape(int numSides) {
mNumSides = numSides;
}
public int getNumSides() {
return mNumSides;
}
}
最佳答案
绝对。 final
关键字保证所有线程始终都看到相同的mNumSides
值。有关final
及其对内存模型here的影响的更多信息。
在不使用final
的情况下,该对象可能会不一致地发布到其他线程,并且线程有可能(虽然极低)将mNumSides
的值视为0
而不是在构造函数中传递的numSides
。
将其设置为volatile
或static
也可以。