java併發程式設計基礎 原子類與原子更新

2021-09-11 08:14:25 字數 1910 閱讀 1076

1、什麼是原子類

原子類可以認為其操作都是不可分割

2、為什麼要有原子類

對多執行緒訪問同乙個變數,我們需要加鎖,而鎖是比較消耗效能的,jdk1.5之後,新增的原子操作類提供了一種用法簡單、效能高效、執行緒安全地更新乙個變數的方式,這些類同樣位於juc包下的atomic包下,

發展到jdk1.8,該包下共有17個類,囊括了原子更新基本型別、原子更新陣列、原子更新屬性、原子更新引用,其中,jdk1.8新增的原子類有doubleaccumulator、doubleadder、longaccumulator、longadder、striped64

1)大致可以歸為3類

atomicboolean、atomicinteger、atomiclong  元老級的原子更新,方法幾乎一模一樣

doubleadder、longadder  對double、long的原子更新效能進行優化提公升

doubleaccumulator、longaccumulator  支援自定義運算

2)示例

/**

* longaccumulator demo

*/public class demo2

}

1)型別:atomicintegerarray、atomiclongarray、atomicreferencearray

2)示例:

/**

* atomicintegerarray demo

*/public class atomicintegerarraydemo ;

atomicintegerarray atomicintegerarray = new atomicintegerarray(arr);

system.out.println(atomicintegerarray.addandget(1, 8));

int i = atomicintegerarray.accumulateandget(0, 2, (left, right) ->

left * right / 3

);system.out.println(i);}}

1)型別:atomicintegerfieldupdater、atomiclongfieldupdater、atomicstampedreference、atomicreferencefieldupdater

3)示例:修改student類中xuhan的字段

/**

* atomiclongfieldupdaterdemo

*/public class atomiclongfieldupdaterdemo

}class student

public long getid()

public void setid(long id)

public string getname()

public void setname(string name)

}

4、 原子更新引用1)型別:atomicreference:用於對引用的原子更新

atomicmarkablereference:帶版本戳的原子引用型別,版本戳為boolean型別。

atomicstampedreference:帶版本戳的原子引用型別,版本戳為int型別。

2)示例:student類與上面的一致

/**

* atomicreferencedemo

*/public class atomicreferencedemo

}

C 併發程式設計(八) 原子型別與資料競爭

c c 中所有的操作預設為非原子操作。非原子操作,並不保證操作的完整性。當乙個操作由2個以上的指令完成時,操作可能只執行了乙個指令,變數就被另外乙個執行緒搶占。當多個執行緒同時讀寫同乙個變數時,就會發生資料競爭。uint64 t i 0 void foo 上述簡單的賦值語句,通過乙個32位的系統編譯...

Java 併發程式設計 基礎 一

同步 和 非同步描述方法的呼叫。同步 方法呼叫一旦開始,呼叫者必須等到方法呼叫返回後,才能繼續後續的行為。序列的進行方法的呼叫。非同步方法呼叫更像乙個訊息傳遞,一旦方法呼叫就會立即返回。併發 多個任務交替執行。並行 多個cpu的系統上,多個cpu同時執行任務。用來表示公共資源或者公共資料。可以被多個...

Java併發程式設計基礎 ThreadLocal的使用

1.threadlocal 簡介 什麼是threadlocal threadlocal 為執行緒變數,是乙個以threadlocal物件為key,任意物件為值的儲存 結構,這個結構被附帶到執行緒上。threadlocal的作用 通過set t 來設定乙個值,在當前執行緒下通過get 方法獲取到原先設...