代做畢業(yè)項目哪個網(wǎng)站好新浪微輿情大數(shù)據(jù)平臺
一、CAS基本原理
1、Unsafe類
(1)概念及作用:增強Java語言操作底層資源的能力,里面的方法多為native修飾的方法(基于C++實現(xiàn)),不建議在代碼中使用,不安全。
(2)底層原理:Unsafe類提供的CAS方法,直接通過native方式(通過指針直接操作內(nèi)存),調(diào)用了底層的CPU指令cmpxchg(原子指令)。
(3)使用:類被final修飾,構(gòu)造方法是私有的,因此不能外部實例化,只能通過反射調(diào)用。
Field theUnsafe=Unsafe.class.getDeclaredField("theUnsafe");
//private static final Unsafe theUnsafe;
2、CAS
(1)比較并交換 CompareAndSwap
CAS(字段內(nèi)存位置,預(yù)期值,新值)
取出內(nèi)存位置的值,與預(yù)期值比較,若相同則設(shè)置為新值
do{
獲得字段的預(yù)期值(oldValue)
計算出需要替換的新值(newValue)
}while(!CAS(內(nèi)存地址,oldValue,newValue))
//注意oldValue的值在不斷的更新
二、JUC原子類
(1)AtomicXXX
具體例子:
JUC并發(fā)編程DAY08-CSDN博客
(2)存在的問題:
ABA問題
1線程操作變量A,2線程修改為B,在1線程發(fā)現(xiàn)前又修改為A。
三、LongAdder
以空間換時間、熱點分離
將value值分離成一個數(shù)組,獲取最終的value時,則將數(shù)組的元素求和。