Atomic Integer 原理分析-getAndIncrement
生活随笔
收集整理的這篇文章主要介紹了
Atomic Integer 原理分析-getAndIncrement
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
getAndIncrement實際上是調(diào)用unsafe這個類里面提供的方法,Unsafe類我們前面在分析AQS的時候講過,這個類相當(dāng)于是一個后門,使得Java可以像C語言的指針一樣直接操作內(nèi)存空間。當(dāng)然也會帶來一些弊端,就是指針的問題。實際上這個類在很多方面都有使用,除了J.U.C這個包以外,還有Netty、kafka等等
這個類提供了很多功能,包括多線程同步(monitorEnter)、CAS操作(compareAndSwap)、線程的掛起和恢復(fù)(park/unpark)、內(nèi)存屏障(loadFence/storeFence)?
內(nèi)存管理(內(nèi)存分配、釋放內(nèi)存、獲取內(nèi)存地址等.)
public final int getAndIncrement() { return unsafe.getAndAddInt(this, valueOffset, 1); }valueOffset,也比較熟了。通過unsafe.objectFieldOffset()獲取當(dāng)前Value這個變量在內(nèi)存中的偏移量,后續(xù)會基于這個偏移量從內(nèi)存中得到value的值來和當(dāng)前的值做比較,實現(xiàn)樂觀鎖
private static final long valueOffset; static { try { valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value")); } catch (Exception ex) { throw new Error(ex); } }?
總結(jié)
以上是生活随笔為你收集整理的Atomic Integer 原理分析-getAndIncrement的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: J .U.C 中的原子操作类
- 下一篇: Atomic Integer 原理分析-