@ThreadSafe
public class SynchronizedInteger {
@GuardedBy("this") private int value;
public synchronized int get() { return value; }
public synchronized void set(int value) { this.value = value; }
}
这本书说:
我检查了第16章,但没有找到确切的答案-内存可见性保证到底有多强?
最佳答案
主要区别在于volatile
在对volatile
变量的写入与从其读取的子请求之间创建了先发生的关系,而synchronized
在解锁和随后的锁之间创建了先发生的关系。
因此,在SynchronizedInteger
发生的情况下-使用SychrozniedInteger
进行的所有后续操作之间的关系(即get()
和set()
调用)之间被创建之前,它们的读写关系并不重要。它不同于volatile int
的行为,后者仅在写操作和后续读操作之间发生。
实际上,我无法想象有任何有意义的示例来说明这种差异,因此,这些行为实际上仅稍有不同。
关于java - 以评论 “Concurrency in Practice”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7257369/