对于以下课程,使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
将其设置为volatilestatic也可以。

10-08 02:14