文章詳情頁
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:66日期:2024-01-28 18:39:07
問題描述
下面這個(gè)方法,我不理解
public final int getAndIncrement() { for (;;) {int current = get();int next = current + 1;if (compareAndSet(current, next)) return current; }}
為何要循環(huán)直到成功?如果這期間有另外的線程更改了value,導(dǎo)致compareAndSet()返回false,那這就表面已經(jīng)不是原子性了吧,還繼續(xù)重復(fù)有啥意義?
問題解答
回答1:它只是要實(shí)現(xiàn)寫操作不會(huì)被覆蓋掉,多線程情況下不會(huì)計(jì)算錯(cuò)誤,如果按照你這么想要實(shí)現(xiàn)原子性,只能使用鎖了,但是這樣效率會(huì)低。
標(biāo)簽:
java
上一條:既然 Java 的垃圾回收機(jī)制能夠自動(dòng)的回收內(nèi)存,怎么還會(huì)出現(xiàn)內(nèi)存泄漏的情況呢下一條:java - Android studio 新項(xiàng)目運(yùn)行結(jié)果都是Process finished with exit code 0
相關(guān)文章:
1. android-studio - Android Studio 運(yùn)行項(xiàng)目的時(shí)候一堆警告,跑步起來!?2. 如何解決Centos下Docker服務(wù)啟動(dòng)無響應(yīng),且輸入docker命令無響應(yīng)?3. MySQL數(shù)據(jù)庫中文亂碼的原因4. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。5. mysql - 新浪微博中的關(guān)注功能是如何設(shè)計(jì)表結(jié)構(gòu)的?6. dockerfile - [docker build image失敗- npm install]7. angular.js - 關(guān)于$apply()8. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?9. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???10. nignx - docker內(nèi)nginx 80端口被占用
排行榜

熱門標(biāo)簽