Java并发编程之CAS

转自:

Java并发编程之CAS

CAS简介说明

CAS(Compare and swap):他是并发算法中用到的一种技术
即:比较和替换是使用一个期望值和一个变量的当前值进行比较
如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值

CAS的使用场景

在程序和算法中一个经常出现的模式就是“check and act”模式
先检查后操作模式发生在代码中首先检查一个变量的值
再基于这个值做一些操作
例:

class MyLock {
    private boolean locked = false;
    public boolean lock() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }
}

注意事项:
    以上程序在多线程中运行时,会出现相应的异常
	如:线程1:运行 if(!locked) 
	    线程2:运行 if(!locked) 
		线程1:运行 locked = true;
        线程2:运行 locked = true;//此处发生错误,因为此时locaked已经为true
为了多线程程序更好的工作,
必须保证“check and act”是一个原子操作,
那么必须使用以下 synchronized 关键字使其为一个原子块

例:

class MyLock {
    private boolean locked = false;
    public synchronized boolean lock() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }
}

你可能感兴趣的:(java,多线程,java)