0. 內存可見性
Java中,所有的變量都是存在主存中,這對所有的線程都是共享的,而且每個線程都有自己的工作內存。當線程與其他線程共享一個變量時,便會把主內存的變量複製到線程內存中去。當發生對變量的修改時,會同步到主內存,主內存再同步到其他線程內存中去。
可見性,指的是線程之間的可見性,一個線程的修改狀態對另一個線程也是可見的。
1. volatile
volatile 修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。
volatile是一種稍弱的同步機制,在訪問volatile變量時不會執行枷鎖操作,也就不會執行線程阻塞,是一種比synchronized更輕量的同步機制。
2. synchronized
synchronized修飾的語法塊或者對象,同一時刻,只能被一個線程訪問。常常被使用在單例中。
3. 總結
這兩個關鍵字,大家夠狠熟悉,我也只是瞭解點簡單的用法。更深層次的還沒學到。