juc-2.1-模拟CAS算法

Posted wf-zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了juc-2.1-模拟CAS算法相关的知识,希望对你有一定的参考价值。

package com.wf.zhang.juc;

/*
 * 模拟 CAS 算法
 */
public class TestCompareAndSwap {

    public static void main(String[] args) {
        final CompareAndSwap cas = new CompareAndSwap();
        
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    int expectedValue = cas.get();
                    boolean b = cas.compareAndSet(expectedValue, (int)(Math.random() * 101));
                    System.out.println(b);
                }
            }).start();
        }
        
    }
    
}

class CompareAndSwap{
    private int value;
    
    //获取内存值
    public synchronized int get(){
        return value;
    }
    
    //比较
    public synchronized int compareAndSwap(int expectedValue, int newValue){
        int oldValue = value;
        
        if(oldValue == expectedValue){
            this.value = newValue;
        }
        
        return oldValue;
    }
    
    //设置
    public synchronized boolean compareAndSet(int expectedValue, int newValue){
        return expectedValue == compareAndSwap(expectedValue, newValue);
    }
}

以上是关于juc-2.1-模拟CAS算法的主要内容,如果未能解决你的问题,请参考以下文章

并发编程__模拟CAS算法

markdown [Apereo CAS 3.5 CORE] Apereo CAS 3.5 #CAS的核心代码片段

CAS算法

volatile关键字与内存可见性&原子变量与CAS算法

单点登录3 手撕代码模拟CAS实现单点登录

原子性 CAS算法