Java併發基礎(四)-volatile和synchronized

0. 內存可見性

Java中,所有的變量都是存在主存中,這對所有的線程都是共享的,而且每個線程都有自己的工作內存。當線程與其他線程共享一個變量時,便會把主內存的變量複製到線程內存中去。當發生對變量的修改時,會同步到主內存,主內存再同步到其他線程內存中去。

可見性,指的是線程之間的可見性,一個線程的修改狀態對另一個線程也是可見的。

1. volatile

volatile 修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

volatile是一種稍弱的同步機制,在訪問volatile變量時不會執行枷鎖操作,也就不會執行線程阻塞,是一種比synchronized更輕量的同步機制。

2. synchronized

synchronized修飾的語法塊或者對象,同一時刻,只能被一個線程訪問。常常被使用在單例中。

3. 總結

這兩個關鍵字,大家夠狠熟悉,我也只是瞭解點簡單的用法。更深層次的還沒學到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章