JDK提供的原子類操作及原理
1,原子類介紹:
針對資料型別的操作,JDK提供的原子類來方便我們的執行緒安全控制。
所有的類儲存在 java.util.concurrent.atomic 包中
基本資料型別 AtomicInteger
陣列型別 AtomicIntegerArray
2,舉個使用的例子:
解決之前的 i++ 安全性問題
如何解決?
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();//相當於count++,區別是這裡可以保證是原子操作
3,原理:
內部的原理是採用了CAS機制,大家可以透過觀察原始碼就可以發現
那麼什麼是CAS機制?
CAS有人翻譯為Compare And Set或Compare And Swap都是正確的。
在多執行緒併發執行的狀態下,鎖的狀態改變,基本都是使用CAS原理,它有一個比較彆扭的叫法“CPU硬體同步原語”,演算法是基於CPU硬體的,原子性操作,不會被其他執行緒打斷。
CAS的演算法,比較當前值和期望的值是否相等,如果相等,則將當前值賦予一個新值。
再比如修改一個Boolean的型別的變數的值,我們也可以採用
private AtomicBoolean atomicBoolean = new AtomicBoolean(false);
public void lock(){
//期望是false,如果是false,則可以修改為true
atomicBoolean.compareAndSet(false, true);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2813794/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java原子類操作原理剖析Java
- Atomic原子操作原理剖析
- CPU實現原子操作的原理
- Java原子操作類,你知道多少?Java
- Java原子類實現原理分析Java
- Java中的13個原子操作類介紹Java
- Java 併發包原子操作類解析Java
- JUC包中原子類使用及其原理
- Java中atomic包中的原子操作類總結Java
- CAS、原子操作類的應用與淺析及Java8對其的優化Java優化
- 《java併發程式設計的藝術》原子操作類Java程式設計
- 原子操作與原子型別型別
- CAS 原子操作
- 切片操作及原理
- 什麼是原子操作?Java如何實現原子操作?Java
- Redis 中的原子操作(1)-Redis 中命令的原子性Redis
- 原子類的ABA問題
- GO的鎖和原子操作分享Go
- pr劫持的原理及操作例項、pr劫持的原理
- 原子操作atomic_t
- ActiveRecord發update請求的原子操作
- 深入理解原子操作的本質
- Atomic 原子類詳解
- Go語言原子操作及互斥鎖,有什麼區別呢?Go
- JDK提供的四種執行緒池JDK執行緒
- 原子更新基本型別類型別
- 從concurrent下的Atomic原子類說起
- 像寶石一樣的Java原子類Java
- 詳談 MySQL 8.0 原子 DDL 原理MySql
- Redis中的原子操作(2)-redis中使用Lua指令碼保證命令原子性Redis指令碼
- 貝斯狸的 Python 之旅 -- 深入切片操作及原理Python
- C 語言的 互斥鎖、自旋鎖、原子操作
- 從JDK原始碼角度看併發的原子性如何保證JDK原始碼
- CAS原子類:AtomicLongArray原始碼解析原始碼
- 【連載 09】atomic 包原子類
- 025 Rust死靈書之原子操作Rust
- Go 語言的原子操作和互斥鎖的區別Go
- CAS原子操作以及其在Java中的應用Java