文章詳情頁(yè)
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:69日期: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. css3 - 在sublime text里, 如何讓emmet生成的帶前綴css屬性垂直對(duì)齊?2. [前端求職必看]前端開發(fā)面試題與答案精選_擴(kuò)展問題3. java - spring-data Jpa 不需要執(zhí)行save 語(yǔ)句,Set字段就可以自動(dòng)執(zhí)行保存的方法?求解4. javascript - 下面的這段算法代碼求解釋5. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?6. javascript - 在top.jsp點(diǎn)擊退出按鈕后,right.jsp進(jìn)行頁(yè)面跳轉(zhuǎn),跳轉(zhuǎn)到login.jsp7. javascript - js 有什么優(yōu)雅的辦法實(shí)現(xiàn)在同時(shí)打開的兩個(gè)標(biāo)簽頁(yè)間相互通信?8. android - 哪位大神知道java后臺(tái)的api接口的對(duì)象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)9. 想找個(gè)php大神仿個(gè)網(wǎng)站。10. javascript - 求解答,koa-bodyparser獲取到的參數(shù)是空對(duì)象,為什么?????
排行榜

熱門標(biāo)簽