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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java原子类场景,CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题...

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java原子类场景,CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CAS你知道嗎?原子類AtomicInteger的ABA問題談談?,原子共面問題(1)CAS是什么?

比較并交換

舉例1,? CAS產生場景代碼?

importjava.util.concurrent.atomic.AtomicInteger;public classCASDemo {public static voidmain(String[] args) {

AtomicInteger atomicInteger=new AtomicInteger(5);//主物理內存//比較5

System.out.println(atomicInteger.compareAndSet(5, 2019)+"\t current data(主物理內存) : "+atomicInteger.get());//修改失敗

System.out.println(atomicInteger.compareAndSet(5, 1024)+"\t current data(主物理內存) : "+atomicInteger.get());

}

}

舉例2,? CAS產生場景代碼?原子引用

public classCAS_ABADemo {public static voidmain(String[] args) {//========================原子引用==========================

User A = new User("A", 123);

User B= new User("B", 456);//主物理內存 引用比較的是地址

AtomicReference atomicReference1 = new AtomicReference<>();

atomicReference1.set(A);

System.out.println(atomicReference1.compareAndSet(A, B)+ "\t" +atomicReference1.get().toString());

System.out.println(atomicReference1.compareAndSet(A, B)+ "\t" +atomicReference1.get().toString());

}

}classUser {

String name;intage;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicUser() {

}public User(String name, intage) {this.name =name;this.age =age;

}

@OverridepublicString toString() {return "User{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

原子引用

參考博客:CopyOnWriteArrayList? 寫時復制----------https://www.cnblogs.com/huangjuncong/p/9160713.html

參考博客:ReentrantLock 獨占鎖(可重入鎖)----------https://www.cnblogs.com/takumicx/p/9338983.html

舉例3,ABA問題的產生和解決方案代碼場景。

public classABADemo {static AtomicReference atomicReference = new AtomicReference<>(100);static AtomicStampedReference atomicStampedReference = new AtomicStampedReference<>(100, 1);public static voidmain(String[] args) {

System.out.println("======ABA問題的產生======");new Thread(() ->{

atomicReference.compareAndSet(100, 101);

atomicReference.compareAndSet(101, 100);

},"t1").start();new Thread(() ->{try{

TimeUnit.SECONDS.sleep(1);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(atomicReference.compareAndSet(100, 2019) + "\t" +atomicReference.get().toString());

},"t2").start();try { TimeUnit.SECONDS.sleep(2); } catch(InterruptedException e) { e.printStackTrace(); }

System.out.println("======ABA問題的解決======");new Thread(() ->{int stamp =atomicStampedReference.getStamp();

System.out.println(Thread.currentThread().getName()+ "\t第一次版本號: " +stamp);try { TimeUnit.SECONDS.sleep(1); } catch(InterruptedException e) { e.printStackTrace(); }

atomicStampedReference.compareAndSet(100,101,

atomicStampedReference.getStamp(),atomicStampedReference.getStamp()+1);

System.out.println(Thread.currentThread().getName()+ "\t第二次版本號: " +atomicStampedReference.getStamp());

atomicStampedReference.compareAndSet(101,100,

atomicStampedReference.getStamp(),atomicStampedReference.getStamp()+1);

System.out.println(Thread.currentThread().getName()+ "\t第三次版本號: " +atomicStampedReference.getStamp());

},"t3").start();new Thread(() ->{int stamp =atomicStampedReference.getStamp();

System.out.println(Thread.currentThread().getName()+ "\t第一次版本號: " +stamp);try { TimeUnit.SECONDS.sleep(3); } catch(InterruptedException e) { e.printStackTrace(); }boolean result=atomicStampedReference.compareAndSet(100,2019,

stamp,stamp+1);

System.out.println(Thread.currentThread().getName()+"\t修改成功與否:"+result+" 當前最新版本號"+atomicStampedReference.getStamp());

System.out.println(Thread.currentThread().getName()+"\t當前實際值:"+atomicStampedReference.getReference());

},"t4").start();

}

}

ABA問題的產生和解決方案

(3)CAS實現原子操作的三大問題。

CAS雖然采用自旋的方式高效的解決了原子操作,但任然存在三個問題.

相關文章暫無相關文章

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java原子类场景,CAS你知道吗?原子类AtomicInteger的ABA问题谈谈?,原子共面问题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。