您好,登錄后才能下訂單哦!
本篇文章為大家展示了什么是LongAdder,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
可以說(shuō)LongAdder是以空間換時(shí)間的方式來(lái)彌補(bǔ)AtomicLong的瓶頸問(wèn)題。
LongAdder的基本思路就是分散熱點(diǎn),在A(yíng)tomicLong中無(wú)論多少個(gè)線(xiàn)程都是對(duì)一個(gè)value進(jìn)行累加,而在LongAdder中除了維護(hù)了一個(gè)value(volatile long base)值,還維護(hù)了一個(gè)數(shù)組。
transient volatile Cell[] cells; @sun.misc.Contended static final class Cell { volatile long value; Cell(long x) { value = x; } final boolean cas(long cmp, long val) { return UNSAFE.compareAndSwapLong(this, valueOffset, cmp, val); } }
雖然這個(gè)數(shù)組是間接維護(hù)的但是這不是重點(diǎn),我們重點(diǎn)要知道這個(gè)數(shù)組中也維護(hù)了一個(gè)value值,目的很簡(jiǎn)單就是為了累加用的;
不同的線(xiàn)程會(huì)命中到數(shù)組的不同槽中,各個(gè)線(xiàn)程只對(duì)自己槽內(nèi)的那個(gè)value進(jìn)行CAS操作,這樣就達(dá)到了熱點(diǎn)分散的目的;
當(dāng)并發(fā)不高的時(shí)候通過(guò)CAS直接操作base值,當(dāng)并發(fā)高的時(shí)候CASbase有可能會(huì)失敗,失敗之后則會(huì)對(duì)Cell[]數(shù)組中的Cell[i]中的value進(jìn)行CAS操作進(jìn)行加1。
上述內(nèi)容就是什么是LongAdder,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。