原子操作实现并发
使用synchronized:
使用synchronized关键字时,如果一个线程想要获取其他线程已经具有的锁,那么该线程将被阻塞
,直到锁可用,当该线程被阻塞等待锁时,他无法进行其他任何操作。
比较并交换(CAS):
使用该方式不用让其他线程进行等待,该方式是用cmpxchg系列指令实现。
原子变量类
使用原子操作,原子变量类可以认为是volatile变量的泛化,此方法也是由比较并交换方式来实现的。
/** * 原始操作类 * @author user * */public class SimulatedCAS {private int value;public synchronized int getValue(){return value;}/** * 判断内存中的值与预期的值进行比较,如果内存中的不变,那么就将新值赋给当前内存 * @param expected 原始值 * @param newValue 新值 * @return */public synchronized int compareAndSwap(int expected,int newValue){if(value==expected)value=newValue;return value;}}public class CasCounter {private SimulatedCAS value;public CasCounter(SimulatedCAS value){this.value=value;}public int getValue(){return value.getValue();}public int increment(){int oldValue=value.getValue();if(value.compareAndSwap(oldValue, oldValue+1)!=oldValue)oldValue=value.getValue();return oldValue;}}