【发布时间】:2018-08-28 07:08:42
【问题描述】:
我知道指令重新排序,但在以下链接中 Will this AssertionError never be thrown in this case? 在批准的答案中有一行:
首先使用变量 n 对引用的发布重新排序(没有发生之前,所以这是允许的)。 Thread1 创建 Holder 实例"
我听不懂这条线。谁能解释一下。这种重新排序将如何发生。我知道thread.start() 发生在关系之前。
我对 java 中重新排序的理解是,如果指令在关系之前没有发生,则可以重新排序。
int c=0;
int d=1;
可以重新排序为
int d=1;
int c=0;
但用户解释说,如果thread.starts() 在关系之前不会发生,那么发布引用可能会使用变量 n 重新排序(这是允许的)。我不明白怎么做。引用在其他类中,变量 n 在不同的类中。
【问题讨论】:
-
我会进一步处理格式化问题。谢谢
-
@Ivan 问题是我无法想象指令重新排序后代码的样子。我假设可以重新排序顺序指令。您可以发布一个 sn-p 指令重新排序后它的外观吗?这会有所帮助。
标签: java concurrency