【发布时间】:2013-04-21 08:43:08
【问题描述】:
在阅读有关内存一致性错误的 Java 文档时。我发现与创建发生的两个动作相关的点 - 在关系之前:
当一个语句调用
Thread.start()时,每个语句都有一个 与该语句的发生之前的关系也有 与新执行的每个语句的发生前关系 线。导致创建的代码的影响 新线程对新线程可见。当一个线程终止并在另一个线程中导致
Thread.join()要返回,则终止执行的所有语句
线程与所有语句都有发生前的关系
加入成功后。代码在线程中的效果 现在对执行连接的线程可见。
我无法理解它们的含义。如果有人用一个简单的例子来解释,那就太好了。
【问题讨论】:
-
'happens-before 关系'意味着保证这些语句集在另一组语句之前执行。因此,在第一种情况下.. 导致新线程启动的语句与将由新启动的线程执行的语句具有发生前的关系。这些语句所做的任何更改都将对线程执行的语句可见。
-
我觉得这个页面很有帮助:preshing.com/20130702/the-happens-before-relation 它举例说明了 A 和 B 之间的“之前发生”的关系与实际发生在 B 之前的 A 的不同。
标签: java java.util.concurrent happens-before