package counter;
public class TrivialCounter implements Counter {
private int value;
@Override
public void increment() {
value++;
}
@Override
public int value() {
return value;
}
}
I have this simply two methods in a class and we need to provide a thread-safe code, and we can use different ways (synchronized blocks, synchronized methods, AtomicInteger..). Obviously they have to be used in the increment() because we have an write-modify-read operator and then it might causes race conditions. but I have two questions:
- Do I use synchronization also for the value() method? Because I don't do any operation on it but it is a field and it is shared between threads, so maybe also if I only access it I have to use synchronization.
- Is AtomicInteger enough to have a thread-safe code? Because using AtomicInteger for the value field permits to do atomic operations on it, but what about visibility? I doesn't provide it..
question from:
https://stackoverflow.com/questions/65541369/must-use-synchronization-when-return-a-value 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…