19

Java メモリ モデルによると、実行が整形式である限り、命令を並べ替えることができます。

だから、次のコードが次の出力を生成する可能性はありますか?

[コード][同じスレッド内]

long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();

[出力]

a == 10, b == 20, c == 15

不可能な場合、JVM/実装はこれを防ぐために何をしますか?

4

2 に答える 2

0

ユーザー システム コールであるため、コンパイラは同じスレッドでそれらを並べ替えるべきではありません。これが正しくない場合、System.out.println(independent values); で並べ替え効果が発生する可能性さえあります。システム/OS のクロックへのアクセスは、これらの操作の間に (常に現在のスレッドに対して) ある種の関係を作成するので、理論的にはそれらの間に何らかの依存関係があると思います。おそらく、JVM はこの問題を考慮しており、ユーザー システム コールの順序を変更することはありません。

于 2014-12-25T08:50:41.210 に答える