1

同期ブロック内のステートメントの並べ替えは可能ですか? 例えば

synchronized(lock) {
   statement1;
   statement2;
}

statement1 と statement2 は互いに依存していません。プロセッサーまたはコンパイラーは、これらのステートメントを並べ替えることができますか?

ありがとうございました。

4

3 に答える 3

8

はいsynchronized、オプティマイザーが決定した場合、これらのステートメントはブロック内で並べ替えることができます。しかし、それらは から取り出すことはできませんsynchronized

于 2011-07-07T18:10:29.460 に答える
1

コンパイラー (実際にはオプティマイザー) は、副作用がなく、物事をスピードアップします。これは、同期ブロック自体の中でのみ発生します。

于 2011-07-07T18:12:30.530 に答える
-1

JSR-133 によると、同期ブロック内のステートメントを並べ替えることができませ

「スレッド内の各アクションは、プログラムの順序で後で来るそのスレッド内のすべてのアクションの前に発生します。」

于 2012-07-27T00:07:08.533 に答える