考虑下面的代码,我想让它成为一个线程安全的类,这样它就永远不会得到奇数:
class Test {
private int value = 0;
private final Object lock;
public void add() {
synchronized (lock) {
value++;
value++;
}
}
public int getValue() {
synchronized (lock) {
return value;
}
}
}
我现在很怀疑lock字段,声明为final,这有关系吗?或者它会破坏线程安全?
我觉得如果lock字段没有声明为final,这应该是一个线程安全的类。如果这个结论有误,请指正,谢谢。
最佳答案
I am now doubt of the lock field, which is declared to be final, will this matter?
是的,仅锁定final
字段对象被认为是最佳实践。
如果可以更改引用,则可以更改锁定的对象,从而破坏线程安全。
关于java - 我可以使用同步到最终字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478011/