(1)基本型別
類atomicboolean、atomicinteger、atomiclong 、(atomicreference )各自提供對相應型別單個變數的訪問和更新。每個類也為該型別提供適當的實用工具方法。
(2)陣列型別
類atomicintegerarray、atomiclongarray 和atomicreferencearray 進一步擴充套件了原子操作,對這些型別的陣列提供了支援。為其陣列元素提供volatile 訪問語義,這對於普通陣列來說是不受支援的。
(3)物件的屬性修改型別:
atomicintegerfieldupdater, atomiclongfieldupdater 和 atomicreferencefieldupdater
(1)compareandset方法
原始碼如下
public
final
boolean
compareandset
(int expect,
int update)
(2)compareandswapint方法
public
final
native
boolean
compareandswapint
(object var1,
long var2,
int var4,
int var5)
;
(3)compareandswapint的native實現(c**)
unsafe_entry
(jboolean,
unsafe_compareandswapint
(jnienv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x))(
"unsafe_compareandswapint");
oop p = jnihandles:
:resolve
(obj)
; jint* addr =
(jint *
)index_oop_from_field_offset_long
(p, offset)
;return
(jint)
(atomic:
:cmpxchg
(x, addr, e)
)== e;
(4)atomic的cmpxchg方法
inline jint atomic:
:cmpxchg (jint exchange_value,
volatile jint* dest, jint compare_value)
}
(1)定義:乙個提供原子操作的integer類,通過執行緒安全的方式操作加減,它提供原子操作來進行integer的使用,因此十分適合高併發情況下的使用。
(2)方法
方法功能
int addandget(int delta)
以原子方式將給定值與當前值相加
boolean compareandset(int expect, int update)
如果當前值 == 預期值,則以原子方式將該值設定為給定的更新值
int decrementandget()
以原子方式將當前值減 1
double doublevalue()
以 double 形式返回指定的數值
float floatvalue()
以 float 形式返回指定的數值
int get()
獲取當前值
int getandadd(int delta)
以原子方式將給定值與當前值相加
int getanddecrement()
以原子方式將當前值減 1
int getandincrement()
以原子方式將當前值加 1
int getandset(int newvalue)
以原子方式設定為給定值,並返回舊值
int incrementandget()
以原子方式將當前值加 1
int intvalue()
以 int 形式返回指定的數值
void lazyset(int newvalue)
最後設定為給定值
long longvalue()
以 long 形式返回指定的數值
void set(int newvalue)
設定為給定值
string tostring()
返回當前值的字串表示形式
boolean weakcompareandset(int expect, int update)
如果當前值 == 預期值,則以原子方式將該設定為給定的更新值
(3)例:
public
class
atomictest}}
class
atomicdemo
implements
runnable
catch
(interruptedexception e)
//結果具有隨機性
system.out.
println
(thread.
currentthread()
.getname()
+" "
+getserialnumber()
);}public
intgetserialnumber()
}
輸出結果(不唯一):
thread-
3202
thread-
4102
thread-
2303
thread-
0505
thread-
1404
小結: Java多執行緒系列 「JUC原子類」01之 框架
根據修改的資料型別,可以將juc包中的原子操作類可以分為4類。1.基本型別 atomicinteger,atomiclong,atomicboolean 2.陣列型別 atomicintegerarray,atomiclongarray,atomicreferencearray 3.引用型別 ato...
java多執行緒系類 JUC原子類 01之框架
本系列內容全部來自於 特在此說明!根據修改的資料型別,可以將juc包中的原子操作類可以分為4類。1.基本型別 atomicinteger,atomiclong,atomicboolean 2.陣列型別 atomicintegerarray,atomiclongarray,atomicreferenc...
java 多執行緒 原子操作 一
對於乙個集合 需要在加入之前 執行 先檢查後執行 的步驟以達到 若沒有則新增,若有則不新增 的目的,實行多執行緒以提高效率。notthreadsafe public class listhelper 可惜的是這段 並不能保證能夠正確的完成工作,這是為什麼呢?集合和動作都已經被synchronized...