文章詳情頁
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:112日期: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ī)制能夠自動的回收內(nèi)存,怎么還會出現(xiàn)內(nèi)存泄漏的情況呢下一條:java - Android studio 新項(xiàng)目運(yùn)行結(jié)果都是Process finished with exit code 0
相關(guān)文章:
1. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)2. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫3. mysql取模分表與分表4. gvim - 誰有vim里CSS的Indent文件, 能縮進(jìn)@media里面的5. HTML 5輸入框只能輸入漢字、字母、數(shù)字、標(biāo)點(diǎn)符號?正則如何寫?6. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問題 麻煩幫我看一下7. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯(cuò)誤8. PHP類屬性聲明?9. objective-c - ios 怎么實(shí)現(xiàn)微信聯(lián)系列表 最好是swift10. javascript - 請教如何獲取百度貼吧新增的兩個(gè)加密參數(shù)
排行榜

熱門標(biāo)簽