国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java并發編程學習之cas-AtomicStampedReference(三)

DevTalking / 2912人閱讀

摘要:作用通過版本號解決的問題。示例當前值,預設當前版本號結果當前值,預設當前版本號結果當前值當前版本號運行結果如下這里用休眠,讓線程和線程一次執行,通過結果可以看出來,線程執行成功,而線程執行失敗。

作用

通過版本號解決ABA的問題。

示例
public class AtomicStampedReferenceDemo {
    static AtomicStampedReference stampedReference = new AtomicStampedReference<>(1, 1);

    public static void main(String[] args) throws InterruptedException {
        int oldStamp = stampedReference.getStamp();
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                boolean result = stampedReference.compareAndSet(1, 2, oldStamp, oldStamp + 1);
                System.out.println("當前值:1,預設2,當前版本號:" + stampedReference.getStamp() + ",結果:" + result);
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                boolean result = stampedReference.compareAndSet(2, 3, oldStamp, oldStamp + 1);
                System.out.println("當前值:2,預設3,當前版本號:" + stampedReference.getStamp() + ",結果:" + result);
            }
        });
        thread1.start();
        thread2.start();
        Thread.sleep(2000);
        System.out.println("當前值:" + stampedReference.getReference() + ",當前版本號:" + stampedReference.getStamp());
    }
}

運行結果如下:

這里用休眠,讓線程1和線程2一次執行,通過結果可以看出來,線程1執行成功,而線程2執行失敗。原因就是因為版本號對不上。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77904.html

相關文章

  • java并發編程習之cas-AtomicStampedReference()

    摘要:作用通過版本號解決的問題。示例當前值,預設當前版本號結果當前值,預設當前版本號結果當前值當前版本號運行結果如下這里用休眠,讓線程和線程一次執行,通過結果可以看出來,線程執行成功,而線程執行失敗。 作用 通過版本號解決ABA的問題。 示例 public class AtomicStampedReferenceDemo { static AtomicStampedReference...

    xiaoxiaozi 評論0 收藏0
  • java并發編程習之線程池-ThreadPoolExecutor()

    摘要:是所有線程池實現的父類,我們先看看構造函數構造參數線程核心數最大線程數線程空閑后,存活的時間,只有線程數大于的時候生效存活時間的單位任務的阻塞隊列創建線程的工程,給線程起名字當線程池滿了,選擇新加入的任務應該使用什么策略,比如拋異常丟棄當前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實現的父類,我們先看看構造函數 構造參數 corePool...

    阿羅 評論0 收藏0
  • java并發編程習之線程的生命周期-yield(

    摘要:方法作用讓當前的線程狀態從運行狀態轉到就緒狀態,然后和其他就緒狀態的同相同優先級的其他線程競爭的執行權。也就是說,這個線程,還是有機會繼續再次執行的。 方法作用 讓當前的線程狀態從運行狀態轉到就緒狀態,然后和其他就緒狀態的同相同優先級的其他線程競爭CPU的執行權。也就是說,這個線程,還是有機會繼續再次執行的。 優先權 優先級范圍是1~10,數字越大,優先級越高,默認為5,但是由于操作系...

    Barry_Ng 評論0 收藏0
  • java并發編程習之種線程啟動方式

    摘要:類這是方式啟動的運行結果如下接口這是方式啟動的運行結果如下接口運行結果如下接口和接口的區別可以有返回值。通過包裝成,傳遞給,因為是實現了接口。 類Thread public class ThreadDemo extends Thread { public static void main(String[] args) { ThreadDemo thread = ...

    enrecul101 評論0 收藏0
  • java并發編程習之FutureTask

    摘要:在并發編程學習之三種線程啟動方式中有提過。是否執行結束,包括正常執行結束或異常結束。獲取返回值,沒有得到返回值前一直阻塞。運行結果如下由于任務被取消,所以拋出異常。注意的是,此時線程還在跑,和返回的是。并不能讓任務真正的結束。 FutureTask 在java并發編程學習之三種線程啟動方式中有提過。主要的方法如下: cancel(boolean mayInterruptIfRunni...

    BothEyes1993 評論0 收藏0

發表評論

0條評論

DevTalking

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<