Javaメモリモデルの並べ替え
2410 ワード
並べ替え
並べ替え、Reorderとは、コンパイラとJava仮想マシンがプログラムの処理順序を変えてプログラムを最適化することを意味します。
並べ替えはプログラムの性能向上に広く応用できる。しかし、シングルスレッドプログラムを実行している間に、処理手順が変更されましたが、プログラムの誤作動を避けるために、多くの制限があります。は、Javaメモリモデルにおいて、並び替えのために「x<y」を出力することがあります。 .
並べ替え、Reorderとは、コンパイラとJava仮想マシンがプログラムの処理順序を変えてプログラムを最適化することを意味します。
並べ替えはプログラムの性能向上に広く応用できる。しかし、シングルスレッドプログラムを実行している間に、処理手順が変更されましたが、プログラムの誤作動を避けるために、多くの制限があります。
public class TestReorder {
public static void main(String[] args){
final Something something = new Something();
// A -----
new Thread(){
public void run(){
something.write();
}
}.start();
// B ----
new Thread(){
public void run(){
something.read();
}
}.start();
}
}
class Something{
private int x = 0;
private int y = 0;
public void write(){
x = 100;
y = 50;
}
public void read(){
if(x < y){
System.out.println("x < y");
}else {
System.out.println("x > y");
}
}
}
メイン関数Main法は、Somethingクラスを実例化し、2つのスレッドを起動します。データスレッドAとリードデータスレッドBを書き込みます。Somethingクラスでは、write()方法はx割当値100であり、y割当値50である。read()方法はx、yの大きさを比較して結果を出力します。プログラムを実行すると、「x<y」が出力されますか?