Java 在易失性字段中发生在关系之前
在Java并发实践中,它说 对易失性字段的写入发生在每次后续读取之前 同样的领域Java 在易失性字段中发生在关系之前,java,multithreading,concurrency,Java,Multithreading,Concurrency,在Java并发实践中,它说 对易失性字段的写入发生在每次后续读取之前 同样的领域 这是否意味着如果两个线程试图同时读取和写入一个易失性字段,那么JVM将确保写入操作先于读取操作,还是会存在争用条件 会有比赛条件。结果将取决于谁先到达: 如果写入是第一个,则在之前发生保证读取将看到新值 如果读是第一个,则在最近的写之前发生,保证读将看到该写的值 关系发生在Java规范中具有极其特定含义之前。Oracle概述了它的含义 重要的是要理解,这种关系是随着在CPU上花费的时间而定义的。换句话说,它与事件
这是否意味着如果两个线程试图同时读取和写入一个易失性字段,那么JVM将确保写入操作先于读取操作,还是会存在争用条件 会有比赛条件。结果将取决于谁先到达:
- 如果写入是第一个,则在之前发生保证读取将看到新值
- 如果读是第一个,则在最近的写之前发生,保证读将看到该写的值
而是说,如果先执行写操作,那么所有线程在执行后续读取操作之前都可以看到写操作的效果。它只提供内存一致性。如果对volatile字段的写入发生在读取该字段之前,那么volatile将保证读取将是最新的值 注意volatile不能保证原子性,它保证可见性。