AtomicReference<BigDecimal> ref;publicDecimalAccountSafeCas(BigDecimal balance){ ref =newAtomicReference<>(balance); }@OverridepublicBigDecimalgetBalance(){returnref.get(); }@Overridepublicvoidwithdraw(BigDecimal amount){while(true) {BigDecimalprev=ref.get();BigDecimalnext=prev.subtract(amount);if(ref.com...
private AtomicReference<BigDecimal> balance; // 账户余额 public DecimalAccount(BigDecimal balance) { this.balance = new AtomicReference<>(balance); } public BigDecimal getBalance() { return balance.get(); // 获取账户余额 } /** * 扣款操作 * @param amount 扣款金额 */ public void withDraw(BigDec...
atomic.AtomicReference; public class AtomicReferenceExample2 { private static AtomicReference<BigDecimal> sum = new AtomicReference<>(); public static void main(String[] args) throws InterruptedException { for (int k = 0; k < 5; k++) { sum.set(BigDecimal.ZERO); ExecutorService es = Executors....
JUC 并发包 中也提供了三个原子应用类型的操作类:AtomicReferenceAtomicMarkableReference AtomicStampedReference 有时候原子操作不一定是基本数据类型,而是 BigDecimal 类型,所以需要用到这些类。 AtomicReferenc ... 并发 cas 数据 版本号 ide 转载 mob604756e75222 ...
AtomicReference package com.conrrentcy.atomic;import java.math.BigDecimal;import java.util.concurrent.atomic.AtomicReference;publicclassWithDrawSampleAtomicReference{publicstaticvoidmain(String[]args){AccountBigDecimalCASaccount=newAccountBigDecimalCAS();for(inti=0;i<1000;i++){newThread(()->{account.withdraw...
BigDecimal next = prev.subtract(amount); if (ref.compareAndSet(prev, next)) { break; } } } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. AtomicReference 就是修改引用所指向的对象实例。