具有原子性的atomic使用和注意事項

2021-10-12 07:35:34 字數 1407 閱讀 7201

public

class

test

public

void

inc(

)catch

(interruptedexception e)

i.incrementandget()

;}public

static

void

main

(string[

] args)

throws interruptedexception

}}

123

4567

8910

atomic的型別

基本型別

atomicboolean:以原子更新的方式更新boolean;

atomicinteger:以原子更新的方式更新integer;

atomiclong:以原子更新的方式更新long;

引用型別

atomicreference : 原子更新引用型別

atomicreferencefieldupdater :原子更新引用型別的字段

atomicmarkablereference : 原子更新帶有標誌位的引用型別

陣列

atomicintegerarray:原子更新整型陣列裡的元素。

atomiclongarray:原子更新長整型陣列裡的元素。

atomicreferencearray:原子更新引用型別陣列裡的元素。

字段

atomicintegerfieldupdater:原子更新整型的字段的更新器。

atomiclongfieldupdater:原子更新長整型欄位的更新器。

atomicstampedreference:原子更新帶有版本號的引用型別

注意事項,如果使用不當會破壞了原子性

錯誤**:

public

class

test

catch

(interruptedexception e)

j=k;

}public

static

void

main

(string[

] args)

throws interruptedexception

thread.

sleep

(2000);

system.out.

println

(test.j);}

}

方法並不具有原子性,執行緒裡會破壞了原子性,在bad上加synchronized,問題解決

原子性atomic與非原子性natomic

原子操作是不可分割的操作,在原子操作執行完畢之前,其不會被任何其它任務或事件中斷。在單處理器系統 uniprocessor 中,能夠在單條指令中完成的操作都可以認為是 原子操作 因為中斷只能發生於指令之間。某些cpu指令系統中引入了test and set test and clear等指令產生臨界...

執行緒安全性 原子性 atomic

定義 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式,或者這些程序將如何交替執行,並且在主調 中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼就稱這個類時安全的 執行緒安全性,主要體現在三個方面,分別是 原子性 提供了互斥訪問,同一時刻只能有乙個執行緒對它進行訪問 可見性 乙...

go 原子操作 atomic的使用

go語言提供的原子操作都是非侵入式的,它們由標準庫 包sync atomic中的眾多函式代表。我們呼叫sync atomic中的幾個函式可以對幾種簡單的型別進行原子操作。這些型別包括int32,int64,uint32,uint64,uintptr,unsafe.pointer,共6個。這些函式的原...