タイトルにあるように、Java でのシングルスレッド プログラミングのコンテキストで volatile が役立つケースはありますか? 変数の値が常に実際にメモリ内でチェックされるようにするために使用されることを知っているので、アプリ/コンパイラが気付かない方法でその値が (シングルスレッドアプリケーションで) 変更される可能性がある場合はありますか?
2 に答える
1
質問で説明されている観点からは役に立ちませんが、コードの実行に影響を与える可能性があります。
先行発生セマンティクスにより、プログラム命令の並べ替えが制限されます。通常、持っている場合
private int a;
private int b;
private boolean ready;
void calc(int x, int z) {
a = x + 5;
b = z - 3;
ready = true;
}
JIT コンパイラーは、メソッド命令を任意の順序で実行できます (パフォーマンス上の理由から)。
しかし、 volatile キーワードを追加すると、変数に割り当てられるprivate volatile boolean ready
前に最初の 2 つの操作が実行されることが保証されます。これでもかなり役に立ちませんが、技術的には違いがあります。true
ready
于 2016-02-04T11:49:54.067 に答える