文章詳情頁
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:98日期: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. MySQL 使用 group by 之后然后 IFNULL(COUNT(*),0) 為什么還是會(huì)獲得 null2. wordpress里,這樣的目錄列表是屬于小工具還是啥?3. 一直報(bào)這個(gè)錯(cuò)誤4. 常量在外面不加引號(hào)會(huì)報(bào)錯(cuò)。5. python如何設(shè)置一個(gè)隨著系統(tǒng)時(shí)間變化的動(dòng)態(tài)變量?6. mysql - 大部分?jǐn)?shù)據(jù)沒有行溢出的text字段是否需要拆表7. mysql federated引擎無法開啟8. sublime text3安裝package control失敗9. 我的怎么不顯示啊,話說有沒有QQ群什么的10. mysql 為什么主鍵 id 和 pid 都市索引, id > 10 走索引 time > 10 不走索引?
排行榜

熱門標(biāo)簽