【发布时间】:2013-05-29 11:10:24
【问题描述】:
似乎即使在单线程中代码也会重新排序?
public int hashCode() {
if (hash == 0) { // (1)
int off = offset;
char val[] = value;
int len = count;
int h = 0;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return hash; // (2)
}
但这真的让我很困惑,为什么 (2) 可以返回 0 而 (1) 可以是非零?
如果我在单线程中使用代码,这甚至不起作用,怎么会发生?
【问题讨论】:
-
这只是一个多线程问题。
-
他@MarkoTopolnik,如何在多线程中执行重新排序?我不确定,但我认为 reordering 是在字节码中执行的,与线程无关?
-
重新排序绝对不会发生在字节码级别;这是一个与 JIT 编译器相关的问题。保证您在单个线程内有理智的行为。
-
@MarkoTopolnik,但是为什么 reordering 的行为在多线程和单线程之间是不同的?
-
@MrROY:这已经偏离了这里的主要问题。如果您真的想问这个问题,请编辑您的问题。