Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 评论「;“实践中的并行性”;_Java_Multithreading_Concurrency - Fatal编程技术网

Java 评论「;“实践中的并行性”;

Java 评论「;“实践中的并行性”;,java,multithreading,concurrency,Java,Multithreading,Concurrency,书上说: 考虑易失性变量的一个好方法是想象它们的行为大致类似于SynchronizedInteger类 在清单3.3中,将volatile变量的读写替换为get和set调用。 … 这个类比并不准确;SynchronizedInteger的内存可见性效应实际上略强于易失性变量的内存可见性效应。看见 第十六章 我查看了第16章,但没有找到确切的答案-内存可见性保证到底有多强?主要区别在于volatile在写入volatile变量和从中读取的子任务之间创建了一个发生在之前的关系,而synchroniz

书上说:

考虑易失性变量的一个好方法是想象它们的行为大致类似于SynchronizedInteger类 在清单3.3中,将volatile变量的读写替换为get和set调用。

这个类比并不准确;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; }
}