Java 评论「;“实践中的并行性”;
书上说: 考虑易失性变量的一个好方法是想象它们的行为大致类似于SynchronizedInteger类 在清单3.3中,将volatile变量的读写替换为get和set调用。Java 评论「;“实践中的并行性”;,java,multithreading,concurrency,Java,Multithreading,Concurrency,书上说: 考虑易失性变量的一个好方法是想象它们的行为大致类似于SynchronizedInteger类 在清单3.3中,将volatile变量的读写替换为get和set调用。 … 这个类比并不准确;SynchronizedInteger的内存可见性效应实际上略强于易失性变量的内存可见性效应。看见 第十六章 我查看了第16章,但没有找到确切的答案-内存可见性保证到底有多强?主要区别在于volatile在写入volatile变量和从中读取的子任务之间创建了一个发生在之前的关系,而synchroniz
…
这个类比并不准确;SynchronizedInteger的内存可见性效应实际上略强于易失性变量的内存可见性效应。看见 第十六章
我查看了第16章,但没有找到确切的答案-内存可见性保证到底有多强?主要区别在于
volatile
在写入volatile
变量和从中读取的子任务之间创建了一个发生在之前的关系,而synchronized
在解锁和后续锁定之间的关系之前创建
因此,在SynchronizedInteger
的情况下,在与SychrozniedInteger
的任何后续操作之间创建关系之前(即get()
和set()
调用),它们是读还是写都不重要。它不同于volatile int的行为,它提供的数据只发生在写入和后续读取之间
实际上,我无法想象任何有意义的例子来说明这种差异,因此这些行为实际上只是略有不同。主要区别在于
volatile
在写入volatile
变量和从中读取的子任务之间创建了“发生在之前”关系,而synchronized
在解锁和后续锁定之间的关系之前创建
因此,在SynchronizedInteger
的情况下,在与SychrozniedInteger
的任何后续操作之间创建关系之前(即get()
和set()
调用),它们是读还是写都不重要。它不同于volatile int的行为,它提供的数据只发生在写入和后续读取之间
事实上,我无法想象任何有意义的例子来说明这种差异,因此这些行为实际上只是略有不同。建议您重新表述一下。让它成为一个独立的问题。稍后在实践中添加对并发性的引用,以说明您对答案感兴趣的原因。建议您重新措辞。让它成为一个独立的问题。稍后在实践中添加对并发性的引用,以说明您对答案感兴趣的原因。
@ThreadSafe
public class SynchronizedInteger {
@GuardedBy("this") private int value;
public synchronized int get() { return value; }
public synchronized void set(int value) { this.value = value; }
}