1. 程式人生 > >(Java學習筆記)i++不是原子性操作

(Java學習筆記)i++不是原子性操作

public class CasStudy01 {
    private static int count = 0;

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                count++;
            }
        };
        for (int i = 0; i < 10000; i++) {
            new Thread(runnable).start();
        }
        System.out.println(count);
    }
}

輸出: 9945

Process finished with exit code 0

剛才的程式碼,照我們的設想,他應該是輸出10000,然而每次我們run這段demo,輸出結果各不相同 這是因為count++這一行程式碼並不是原子操作,這一行程式碼實際在執行時,被分為取值,修改,儲存三步操作,所以1,2兩個執行緒同時取出值a,並且自增1修改為a+1,再儲存的話,兩次自增實際上只自增了1