1. 程式人生 > >java多執行緒學習筆記2---理解原子性和可見性

java多執行緒學習筆記2---理解原子性和可見性

1.原子性

原子,從字面意思理解就是構成物質的基本單位,那麼它就是不可分的,對於不能分割的操作就是原子操作,比如a=0,這個操作就是不能被分開的,把這種原子操作就稱為原子性,原子操作在同一時刻是不能被多個執行緒同時訪問的,所以不存線上程安全問題。然而還有很多操作都是可分的,就是非原子操作,就會存線上程安全問題,比如c=a+b;此操作就不屬於原子操作,為了保證資料的安全性,就要進行執行緒同步。

2.可見性

可見性是相對於多個執行緒之間的,一個執行緒的操作,另外的執行緒是可見的,在java中使用volatile保證變數在多個執行緒之間是可見的,通過使用volatile關鍵字強制的從公共記憶體中讀取變數的值,雖然變數具有可見性,但是對變數的操作不是原子操作,在併發的環境下還是會出現錯誤。所以volatile只保證可見性不保證原子性,而synchronized即保證原子性又保證可見性。