高併發程序設計之無鎖

就人而言,分爲被悲觀派和樂觀派;對於樂天派而言,總是把事情往好的方面想。他們認爲所有的事情總是不太容易發生的,出錯的機率很小。對於悲觀派,他們總是擔心意外的發生,所以他們把所有的事情都想的很中哦,確保萬無一失。

對於併發控制而言,也可以分爲悲觀鎖和樂觀鎖;我們平時所說的synchronized和ReentrantLock鎖都屬於悲觀鎖了;而樂觀鎖我們往往是通過CAS(Compare And Swap比較並交換)來實現的。

  1. 與鎖相比,使用比較交換會使程序更加的複雜化,但由於其是非阻塞的,不會出現死鎖的情況,擁有更優越的性能。
  2. 其過程如下:它包含三個參數(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之外,還會對比時間戳,只有都相等纔會更改爲新值。

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