就人而言,分爲被悲觀派和樂觀派;對於樂天派而言,總是把事情往好的方面想。他們認爲所有的事情總是不太容易發生的,出錯的機率很小。對於悲觀派,他們總是擔心意外的發生,所以他們把所有的事情都想的很中哦,確保萬無一失。
對於併發控制而言,也可以分爲悲觀鎖和樂觀鎖;我們平時所說的synchronized和ReentrantLock鎖都屬於悲觀鎖了;而樂觀鎖我們往往是通過CAS(Compare And Swap比較並交換)來實現的。
- 與鎖相比,使用比較交換會使程序更加的複雜化,但由於其是非阻塞的,不會出現死鎖的情況,擁有更優越的性能。
- 其過程如下:它包含三個參數(V、E、N)。V表示要更新的值,E表示預期的值,N表示新值。僅當V==E時,纔會將V的值設爲N,如果兩者不相等,說明已經被修改過,則當前線程什麼都不做。
雖然CAS可以解決一些問題,但是當CAS發生ABA問題時,我們有時候也很頭疼的,(修改過之後又修改爲原值)。
那麼此時我們可以用帶有時間戳的對象引用:AtomicStampedReference,AtomicReference無法解決ABA問題,是因爲丟失了狀態信息;
public AtomicStampedReference(V initialRef, int initialStamp) ;
AtomicStampedReference除了會對比V==E之外,還會對比時間戳,只有都相等纔會更改爲新值。