Java中的重排序是指,指令在程序中的執行順序與編寫順序不一致。這是因為Java虛擬機在執行指令時,為了加速執行速度,會對指令執行的順序進行優化。而重排序可能會導致程序執行的結果與預期不一致,所以需要特別注意。
Java中的重排序主要與兩個因素有關:線程和指令優化。在多線程環境中,由于線程交替執行導致指令執行順序的不確定性,可能會導致重排序現象。此外,Java虛擬機為了提高執行效率,可能會對指令執行順序進行重排,也會導致重排序的發生。
public class ReorderingExample { static int x = 0, y = 0, a, b; public static void main(String[] args) throws InterruptedException { Thread one = new Thread(new Runnable() { public void run() { a = 1; x = b; } }); Thread two = new Thread(new Runnable() { public void run() { b = 1; y = a; } }); one.start(); two.start(); one.join(); two.join(); System.out.println("(" + x + "," + y + ")"); } }
上述代碼中,如果發生重排序,使得 "a = 1" 和 "b = 1" 兩條語句交錯執行,最終輸出的結果為 (0,0),而不是預期的 (1,1)。為了避免重排序的發生,可以使用"volatile"關鍵字來禁止指令的重排序。
上一篇css定義動畫并使用
下一篇css左側菜單右側對應