JUC并发编程九 并发架构--CAS
生活随笔
收集整理的這篇文章主要介紹了
JUC并发编程九 并发架构--CAS
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
compare and set(或者 compare and swap)
原子整數(shù)
AtomicBoolean, AtomicInteger, AtomicLong
import java.util.concurrent.atomic.AtomicInteger; import java.util.function.IntUnaryOperator;public class TestAtomic {public static void main(String[] args) {AtomicInteger i = new AtomicInteger(5);// System.out.println(i.incrementAndGet()); // ++i 先自增再獲取 // System.out.println(i.getAndIncrement()); // i++ 先獲取再自增 // // i.getAndAdd(10); // i.addAndGet(5);i.updateAndGet(value -> value * 10);System.out.println(i.get());updateAndGet(i,value->value/2);System.out.println(i.get());}public static void updateAndGet(AtomicInteger i, IntUnaryOperator updateFunction){int value;int next;do{value = i.get();next = updateFunction.applyAsInt(value);}while(!i.compareAndSet(value,next));} }原子引用
AtomicReference, AtomicMarkableReference,AtomicStampedReference
import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference;public class TestAtomicReference {public static void main(String[] args) {DecimalAccount.demo(new DecimalAccountCas(new BigDecimal("10000")));} }class DecimalAccountCas implements DecimalAccount{private AtomicReference<BigDecimal> balance;public DecimalAccountCas(BigDecimal balance){this.balance = new AtomicReference<>(balance);}@Overridepublic BigDecimal getBalance() {return balance.get();}@Overridepublic void withdraw(BigDecimal amount) {while(true){BigDecimal prev = balance.get();BigDecimal next = prev.subtract(amount);if(balance.compareAndSet(prev,next)){break;}}} }interface DecimalAccount{// 設(shè)置余額BigDecimal getBalance();void withdraw(BigDecimal amount);static void demo(DecimalAccount account){List<Thread> ts = new ArrayList<>();for (int i = 0; i < 1000; i++) {ts.add(new Thread(()->{account.withdraw(BigDecimal.TEN);}));}ts.forEach(Thread::start);ts.forEach(t->{try {t.join();} catch (InterruptedException e) {e.printStackTrace();}});System.out.println(account.getBalance());} }總結(jié)
以上是生活随笔為你收集整理的JUC并发编程九 并发架构--CAS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUC并发编程九 并发架构--循环打印
- 下一篇: JUC并发编程十 并发架构--Unsaf