2

基本的に、次の 2 つのステートメントがあります。

Project project = projectDao.createProject(...);
projectDao.deleteInProgressEntry(...);

inProgress エントリが削除される前に (次の行が実行される前に)プロジェクトの作成が完了したことを確認したい。ステートメントは互いに完全に独立しているため、コンパイラがコード内の順序を尊重しないのではないかと心配しています。

volatile についていくつか読んだことがありますが、最初の行の先頭に volatile を追加しようとしたので、volatile Project project. しかし、それはコンパイルされません。マルチスレッドやアトミック操作などで迷子になることなく、探しているものを見つけるのに苦労しました.

4

1 に答える 1

6

ステートメントは互いに完全に独立しているため、コンパイラがコード内の順序を尊重しないのではないかと心配しています。

いいえ、そうなります。他のスレッドが操作の結果を順不同で観察する可能性がありますが、実行中のスレッドの観点からは、間違いなく順番に実行されます。

于 2013-11-07T23:07:00.787 に答える