文章詳情頁
java - 如何理解AtomicInteger里的CAS操作?
瀏覽:62日期:2024-01-28 18:39:07
問題描述
下面這個方法,我不理解
public final int getAndIncrement() { for (;;) {int current = get();int next = current + 1;if (compareAndSet(current, next)) return current; }}
為何要循環直到成功?如果這期間有另外的線程更改了value,導致compareAndSet()返回false,那這就表面已經不是原子性了吧,還繼續重復有啥意義?
問題解答
回答1:它只是要實現寫操作不會被覆蓋掉,多線程情況下不會計算錯誤,如果按照你這么想要實現原子性,只能使用鎖了,但是這樣效率會低。
標簽:
java
上一條:既然 Java 的垃圾回收機制能夠自動的回收內存,怎么還會出現內存泄漏的情況呢下一條:java - Android studio 新項目運行結果都是Process finished with exit code 0
相關文章:
1. sass - gem install compass 使用淘寶 Ruby 安裝失敗,出現 4042. javascript - js 對中文進行MD5加密和python結果不一樣。3. mysql里的大表用mycat做水平拆分,是不是要先手動分好,再配置mycat4. window下mysql中文亂碼怎么解決??5. 為啥不用HBuilder?6. python - (初學者)代碼運行不起來,求指導,謝謝!7. javascript - h5上的手機號默認沒有識別8. python - 獲取到的數據生成新的mysql表9. python的文件讀寫問題?10. 為什么python中實例檢查推薦使用isinstance而不是type?
排行榜
