同期ブロック内のステートメントの並べ替えは可能ですか? 例えば
synchronized(lock) {
statement1;
statement2;
}
statement1 と statement2 は互いに依存していません。プロセッサーまたはコンパイラーは、これらのステートメントを並べ替えることができますか?
ありがとうございました。
同期ブロック内のステートメントの並べ替えは可能ですか? 例えば
synchronized(lock) {
statement1;
statement2;
}
statement1 と statement2 は互いに依存していません。プロセッサーまたはコンパイラーは、これらのステートメントを並べ替えることができますか?
ありがとうございました。
はいsynchronized
、オプティマイザーが決定した場合、これらのステートメントはブロック内で並べ替えることができます。しかし、それらは から取り出すことはできませんsynchronized
。
コンパイラー (実際にはオプティマイザー) は、副作用がなく、物事をスピードアップします。これは、同期ブロック自体の中でのみ発生します。
JSR-133 によると、同期ブロック内のステートメントを並べ替えることができませ ん。
「スレッド内の各アクションは、プログラムの順序で後で来るそのスレッド内のすべてのアクションの前に発生します。」