java - "Happens-before"Java相关volatile字段说明

标签 java concurrency happens-before

我正在研究 Java 并发性并找到了以下资源以供引用,

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html

http://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html

我对关于 Happens-before 关系的声明有点困惑,

A write to a volatile field happens-before every subsequent read of that same field. Writes and reads of volatile fields have similar memory consistency effects as entering and exiting monitors, but do not entail mutual exclusion locking.

我对上面声明中加粗的部分表示不清楚。

谁能告诉我它与该声明相关的确切含义是什么?

最佳答案

进入/退出监视器会触发一个happens-before 屏障,就像访问一个volatile 变量一样,但它们也会触发互斥锁。 互斥(或互斥)确保如果有多个线程试图跨越屏障,一个线程可能会被锁定,直到另一个线程释放互斥锁。

volatile 变量具有happens-before 特性但没有任何锁定。

关于java - "Happens-before"Java相关volatile字段说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118052/

相关文章:

c# - C# 中的并发集合

java - Java 如何管理 volatile 字段的可见性?

multithreading - java : how volatile guarantee visibility of "data" in this piece of code?

java - volatile 发布保证有多深?

java - 零长度数组在内存中是如何表示的?

java - 实现可比接口(interface)时出现编译错误

Java 使用带有 try-with-resources 的扫描器

java - 实现 Java Comparator 的问题 - 泛型

.net - AutoResetEvent、ManualResetEvent 与监视器

c# - 如何将 "Parallel.ForEach"作为后台任务执行,将控制立即返回给调用方法?