对于下面的类,将 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
或静态
也可以工作。
关于java - 具有非最终成员且没有修改器方法的类的线程安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623042/