@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/

10-15 09:55