Atomiclnteger的使用場景和底層原理

2021-10-19 18:17:40 字數 924 閱讀 1760

1.說說atomiclnteger的使用場景

atomicinteger提供原子操作來進行integer的使用,適合併發情況下的使用,比如兩個執行緒對同乙個整數累加。

2.為什麼atomiclnteger是執行緒安全的,原理是什麼

atomicinteger是對int型別的乙個封裝,提供原子性的訪問和更新操作,其原子性操作的實現是基於cas(compare-and-swap)技術。cas表現為一組指令,當利用cas執行試圖進行一些更新操作時,會首先比較當前數值,如果數值未變,代表沒有其它執行緒進行併發修改,則成功更新。如果數值改變,則可能出現不同的選擇,要麼進行重試,要麼就返回是否成功。也就是所謂的「樂觀鎖」。

3.atomiclnteger的cas機制會導致什麼問題

會導致aba問題,操作物件,獲取物件後,執行cas操作前,被其他執行緒修改後,且又修改為原來的物件值,導致cas忽略其他執行緒的修改,成功執行cas物件修改。

4.用volatile修飾變數不可以嗎

volatile讓變數每次在使用的時候,都從主存中取,而不是從各個執行緒的工作記憶體,執行緒都能得到當前volatile變數的最新值。volatile並不保證併發的正確性,要使volatile變數提供理想的執行緒安全,必須同時滿足下面兩個條件:1 對變數的寫操作不依賴於當前值 ; 2 該變數沒有包含在具有其他變數的不變式中。示例**如下:

volatile boolean shutdown;  

public void shutdown()

public void dowork()

}

shutdown標誌從false轉換為true,然後程式停止。狀態標誌並不依賴於程式內任何其他狀態,此處非常適合使用volatile。

SqlCacheDependency的使用方法

步驟一 sql資料庫必須開啟servicebroker服務,首先檢測是否已經啟用servicebroker,檢測方法 select databasepropertyex 資料庫名稱 isbrokerenabled 1表示已經啟用0表示沒有啟用 步驟二 如果servicebroker沒有啟用,使用下面...

UITabBarController的使用心得

這段時間了解下uitabbarcontroller,今天把我遇到的問題和心得記錄下。網上有很多uitabbarcontroller的資料,對於一些uitabbarcontroller的基礎性知識,在這裡我就不囉嗦了。可以看這裡 今天我要說的是自己的一些不同於網上的的心得。官方的一副還是要貼出來。我也...

UITabBarController的使用步驟

初始化 uitabbarcontroller 設定uiwindow的rootviewcontroller為 uitabbarcontroller 根據具體情況,通過addchildviewcontroller方法新增對應個數的子控制器 uitabbarcontroller新增控制器的方式有2種 新增...