因爲CPU、內存、I/O 設備的速度差別,爲了合理利用 CPU 的高性能,平衡這三者的速度差別,計算機體系機構、操做系統、編譯程序都作出如下處理:java
public class Test { private long count = 0; private void add10K() { int idx = 0; while(idx++ < 10000) { count += 1; } } public static long calc() { final Test test = new Test(); // 建立兩個線程,執行 add() 操做 Thread th1 = new Thread(()->{ test.add10K(); }); Thread th2 = new Thread(()->{ test.add10K(); }); // 啓動兩個線程 th1.start(); th2.start(); // 等待兩個線程執行結束 th1.join(); th2.join(); return count; } }
指令 1:首先,須要把變量 count 從內存加載到 CPU 的寄存器; 指令 2:以後,在寄存器中執行 +1 操做; 指令 3:最後,將結果寫入內存(緩存機制致使可能寫入的是 CPU 緩存而不是內存)。
public class Singleton { static Singleton instance; static Singleton getInstance(){ if (instance == null) { synchronized(Singleton.class) { if (instance == null) instance = new Singleton(); } } return instance; } }