日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JUC并发编程九 并发架构--CAS

發(fā)布時(shí)間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。