考虑下面的代码,我想让它成为一个线程安全的类,这样它就永远不会得到奇数:
class Test {
private int value = 0;
private final Object lock;
public void add() {
synchronized (lock) {
value++;
value++;
}
}
public int getValue() {
synchronized (lock) {
return value;
}
}
}
我现在对宣布为 final 的 lock 字段表示怀疑,这有关系吗?还是会破坏线程安全?
我认为如果锁字段没有声明为最终的,这应该是一个线程安全的类。如果这个结论是错误的,请纠正我,谢谢。