文章詳情頁
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:87日期: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)寫操作不會被覆蓋掉,多線程情況下不會計(jì)算錯(cuò)誤,如果按照你這么想要實(shí)現(xiàn)原子性,只能使用鎖了,但是這樣效率會低。
標(biāo)簽:
java
上一條:既然 Java 的垃圾回收機(jī)制能夠自動(dòng)的回收內(nèi)存,怎么還會出現(xiàn)內(nèi)存泄漏的情況呢下一條:java - Android studio 新項(xiàng)目運(yùn)行結(jié)果都是Process finished with exit code 0
相關(guān)文章:
1. mysql在限制條件下篩選某列數(shù)據(jù)相同的值2. php - 生產(chǎn)環(huán)境下,給MySQL添加索引,修改表結(jié)構(gòu)操作,如何才能讓線上業(yè)務(wù)不受影響?3. mysql - Sql union 操作4. mysql - 僅僅只是把單引號與反斜杠轉(zhuǎn)義不用prepare statement能否避免sql注入?5. java - Mybatis 數(shù)據(jù)庫多表關(guān)聯(lián)分頁的問題6. mysql主主同步,從庫不同步應(yīng)該怎么解決?7. mysql - 拖拽重排序后怎么插入數(shù)據(jù)庫?8. 新入手layuiadmin,部署到tp中。想用php自已寫一個(gè)后臺管理系統(tǒng)。9. android - 安卓做前端,PHP做后臺服務(wù)器 有什么需要注意的?10. mysql 獲取時(shí)間函數(shù)unix_timestamp 問題?
排行榜

熱門標(biāo)簽