原子性
原子是世界上的最小單位显拳,具有不可分割性棚愤。比如 a=0;(a非long和double類型) 這個操作是不可分割的杂数,那么我們說這個操作時原子操作宛畦。再比如:a++; 這個操作實際是a = a + 1揍移;是可分割的次和,所以他不是一個原子操作。非原子操作都會存在線程安全問題那伐,需要我們使用同步技術(shù)(sychronized)來讓它變成一個原子操作踏施。一個操作是原子操作,那么我們稱它具有原子性罕邀。java的concurrent包下提供了一些原子類畅形,我們可以通過閱讀API來了解這些原子類的用法。比如:AtomicInteger诉探、AtomicLong日熬、AtomicReference等。
一致性
可見性肾胯,是指線程之間的可見性竖席,一個線程修改的狀態(tài)對另一個線程是可見的。也就是一個線程修改的結(jié)果敬肚。另一個線程馬上就能看到怕敬。比如:用volatile修飾的變量,就會具有可見性帘皿。volatile修飾的變量不允許線程內(nèi)部緩存和重排序东跪,即直接修改內(nèi)存。所以對其他線程是可見的。但是這里需要注意一個問題虽填,volatile只能讓被他修飾內(nèi)容具有可見性丁恭,但不能保證它具有原子性。比如 volatile int a = 0斋日;之后有一個操作 a++牲览;這個變量a具有可見性,但是a++ 依然是一個非原子操作恶守,也就這這個操作同樣存在線程安全問題第献。