版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
模拟CAS(Compare-And-Swap)算法
package com.pccc.pactera.juc01; 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); } }
在学习volatile关键字时,了解到原子变量CAS算法,三个操作数:内存值V,预估值A,更新值B,当且仅当V==A时,V=B,否则不做任何操作;