Fork me on GitHub

3. 原子变量-CAS算法

1. 是什么 ?

2. CAS算法模拟

package com.gf.demo03;
public class TestCompareAndSwap {

	public static void main(String[] args) {
		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);
	}
}

 

关注我的公众号,精彩内容不能错过

posted @ 2017-12-14 14:41  程序员果果  阅读(282)  评论(0编辑  收藏  举报