91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java atomic原子類的使用方法是什么

發布時間:2021-11-19 16:38:45 來源:億速云 閱讀:108 作者:iii 欄目:編程語言

這篇文章主要介紹“Java atomic原子類的使用方法是什么”,在日常操作中,相信很多人在Java atomic原子類的使用方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java atomic原子類的使用方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在講atomic原子類之前先看一個小例子:

public class UseAtomic {public static void main(String[] args) {AtomicInteger atomicInteger=new AtomicInteger();for(int i=0;i<10;i++){Thread t=new Thread(new AtomicTest(atomicInteger));t.start();try {t.join(0);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(atomicInteger.get());}}class AtomicTest implements Runnable{AtomicInteger atomicInteger;public AtomicTest(AtomicInteger atomicInteger){this.atomicInteger=atomicInteger;}@Overridepublic void run() {atomicInteger.addAndGet(1);atomicInteger.addAndGet(2);atomicInteger.addAndGet(3);atomicInteger.addAndGet(4);}}

最終的輸出結果為100,可見這個程序是線程安全的。如果把AtomicInteger換成變量i的話,那最終結果就不確定了。

打開AtomicInteger的源碼可以看到:

// setup to use Unsafe.compareAndSwapInt for updatesprivate static final Unsafe unsafe = Unsafe.getUnsafe();private volatile int value;

volatile關鍵字用來保證內存的可見性(但不能保證線程安全性),線程讀的時候直接去主內存讀,寫操作完成的時候立即把數據刷新到主內存當中。

CAS簡要

/*** Atomically sets the value to the given updated value* if the current value {@code ==} the expected value.** @param expect the expected value* @param update the new value* @return {@code true} if successful. False return indicates that* the actual value was not equal to the expected value.*/public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}

從注釋就可以看出:當線程寫數據的時候,先對內存中要操作的數據保留一份舊值,真正寫的時候,比較當前的值是否和舊值相同,如果相同,則進行寫操作。如果不同,說明在此期間值已經被修改過,則重新嘗試。

compareAndSet使用Unsafe調用native本地方法CAS(CompareAndSet)遞增數值。

CAS利用CPU調用底層指令實現。

兩種方式:總線加鎖或者緩存加鎖保證原子性。

到此,關于“Java atomic原子類的使用方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大埔区| 马边| 万全县| 临潭县| 平阳县| 台东县| 北宁市| 蒙阴县| 梅州市| 九龙坡区| 平塘县| 大庆市| 沁水县| 科技| 肥西县| 贵德县| 海伦市| 金塔县| 景泰县| 文山县| 太保市| 安远县| 安阳市| 博白县| 射洪县| 镇坪县| 昌宁县| 赫章县| 祥云县| 霸州市| 东阳市| 大宁县| 沙雅县| 于田县| 永平县| 玉溪市| 铜陵市| 页游| 石泉县| 昭通市| 含山县|