Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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,在Java并发实践中,它说 对易失性字段的写入发生在每次后续读取之前 同样的领域 这是否意味着如果两个线程试图同时读取和写入一个易失性字段,那么JVM将确保写入操作先于读取操作,还是会存在争用条件 会有比赛条件。结果将取决于谁先到达: 如果写入是第一个,则在之前发生保证读取将看到新值 如果读是第一个,则在最近的写之前发生,保证读将看到该写的值 关系发生在Java规范中具有极其特定含义之前。Oracle概述了它的含义 重要的是要理解,这种关系是随着在CPU上花费的时间而定义的。换句话说,它与事件

在Java并发实践中,它说

对易失性字段的写入发生在每次后续读取之前 同样的领域


这是否意味着如果两个线程试图同时读取和写入一个易失性字段,那么JVM将确保写入操作先于读取操作,还是会存在争用条件

会有比赛条件。结果将取决于谁先到达:

  • 如果写入是第一个,则在之前发生保证读取将看到新值
  • 如果读是第一个,则在最近的写之前发生,保证读将看到该写的值
关系发生在Java规范中具有极其特定含义之前。Oracle概述了它的含义

重要的是要理解,这种关系是随着在CPU上花费的时间而定义的。换句话说,它与事件发生的初始顺序无关:在应用程序中,写入或读取可以排在第一位


而是说,如果先执行写操作,那么所有线程在执行后续读取操作之前都可以看到写操作的效果。它只提供内存一致性。

如果对volatile字段的写入发生在读取该字段之前,那么volatile将保证读取将是最新的

注意volatile不能保证原子性,它保证可见性。