天天看點

Java自定義cas操作

java Unsafe工具類提供了一個方法

這個就是一個cas操作,原子操作。比較var1, 在var2偏移即offset位置的值是否為var4。如果是var4,更新為var5,傳回true。否則,不做更新傳回false

最近,聽同僚說了cas用到項目裡面,感覺高大上。學習了一下,包裝了一個cas整型操作

寫了一測試類

這裡可以通過cas實作,線程安全。cas有點就是不會有鎖的開銷,上下文切換。也有缺點,自旋浪費資源,不能對多個資源保證線程安全

這裡需要注意兩點

1. 使用反射擷取Unsafe對象

2. 注意offset的擷取