zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    最长上升子序列问题总结
    Problem C
    Problem C
    Problem P
    Problem P
    Problem H
    Problem H
    Problem D
    Problem D
    Linux系统调用--getrlimit()与setrlimit()函数详解
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/12079533.html
Copyright © 2011-2022 走看看