小编poq*_*poq的帖子

最终的多线程保证和Java中的内存模型有什么关系?

内存模型在 17.4 中定义。内存模型

17.5 中给出了现场final多线程保证。最终字段语义

我不明白为什么这些是单独的部分。

AFAIKfinal和内存模型都提供了一些保证。
任何真正的程序执行都必须遵守这两个保证。
但现在很清楚这些final保证是否适用于用于验证 17.4.8 中因果关系要求的中间执行。执行和因果关系要求

另一个不清楚的时刻是17.5.1。Final Fields 的语义定义了一个新的“special” ,它与内存模型happens-before中的不同:happens-before

happens-before排序不会与其他happens-before排序传递地关闭。

如果它们相同happens-before,则happens-before不再是偏序(因为它不具有传递性)。
我不明白这怎么不会破坏事情。

如果这些不同happens-before,那么就不清楚 17.5 中的是什么。Final Field Semantics确实如此。17.4中
内存模型用于限制读取可以返回的内容:happens-before

非正式地,如果没有happens-before排序来阻止r读取,则允许读取查看写入的结果。w

但是17.5。最后的字段语义是一个不同的部分。

java final java-memory-model jls happens-before

8
推荐指数
1
解决办法
181
查看次数

标签 统计

final ×1

happens-before ×1

java ×1

java-memory-model ×1

jls ×1