第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Unsafe 類方法介紹

1. 前言

本節(jié)內(nèi)容主要是對 Unsafe 類方法進(jìn)行介紹,JDK jar 包中的 Unsafe 類提供了硬件級別的原子性操作,Unsafe 類中的方法都是 native 方法,它們使用 JNI 的方式訪問本地 C++實(shí)現(xiàn)庫。

本節(jié)我們來了解一下 Unsafe 提供的幾個(gè)主要的方法進(jìn)行介紹。為我們后續(xù)對 Unsafe 方法的使用奠定良好的基礎(chǔ)。

2. 方法介紹

方法 作用
objectFieldOffset(Field) 返回指定的變量在所屬類中的內(nèi)存偏移地址,該偏移地址僅僅在該 UnSafe 函數(shù)中訪問指定字段時(shí)使用。
arrayBaseOffset(Class) 獲取取數(shù)組中第一個(gè)元系的地址。
arrayIndexScale(Class) 獲取數(shù)組中一個(gè)元素占用的字節(jié)。
compareAndSwapLong(Object,long,long,long) 比較對象 obj 中偏移量為 offset 的變量的值是否與 expect 相等,相等則使用 update 值更新,然后返回 true,否則返回 false。
longgetLongvolatile(Object,long) 獲取對象 obj 中偏移量為 offset 的變量對應(yīng) volatile 語義的值。
void putLongvolatile(Object,long,long) 設(shè)置 obj 對象中 offset 偏移的類型為 long 的 field 的值為 value, 支持 volatile 語義。
putOrderedLong(Object,long,long) 設(shè)置 obj 對象中 offset 偏移地址對應(yīng)的 long 型 field 的值為 value。這是一個(gè)有延遲的 putLongvolatile 方法,并且不保證值修改對其他線程立刻可見。只有在變量使用 volatile 修飾并且預(yù)計(jì)會被意外修改時(shí)才使用該方法。
unpark(Object) 喚醒調(diào)用 park 后阻塞的線程。

3. park 方法介紹

方法描述 void park(booleanisAbsolute,longtime):阻塞當(dāng)前線程,其中參數(shù) isAbsolute 等于 false 且 time 等于 0 表示一直阻塞。

方法解讀:time 大于 0 表示等待指定的 time 后阻塞線程會被喚醒,這個(gè) time 是個(gè)相對值,是個(gè)增量值,也就是相對當(dāng)前時(shí)間累加 time 后當(dāng)前線程就會被喚醒。如果 isAbsolute 等于 true,并且 time 大于 0,則表示阻塞的線程到指定的時(shí)間點(diǎn)后會被喚醒。

這里 time 是個(gè)絕對時(shí)間,是將某個(gè)時(shí)間點(diǎn)換算為 ms 后的值。另外,當(dāng)其他線程調(diào)用了當(dāng)前阻塞線程的 interrupt 方法而中斷了當(dāng)前線程時(shí),當(dāng)前線程也會返回,而當(dāng)其他線程調(diào)用了 unPark 方法并且把當(dāng)前線程作為參數(shù)時(shí)當(dāng)前線程也會返回。

4. JDK8 新增的函數(shù)

方法 作用
getAndSetLong(Object, long, long) 獲取對象 obj 中偏移量為 offset 的變量 volaile 語義的當(dāng)前值,并設(shè)置變量 volaile 語義的值為 update。
getAndAddLong(Object,long,long) 方法獲取 object 中偏移量為 offset 的 volatile 變量的當(dāng)前值,并設(shè)置變量值為原始值加上 addValue

5. 小結(jié)

本節(jié)的核心內(nèi)容即 Usafe 方法的了解,為下邊講解 Unsafe 方法的使用奠定一個(gè)良好的基礎(chǔ)。