Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
785 views
in Technique[技术] by (71.8m points)

thread safety - Must use synchronization when return a value?

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:

  1. 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.
  2. 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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...