java多线程
public class SimulatedCAS {private int value;
public synchronized int getValue() { return value; }
public synchronized int compareAndSwap(int expectedValue, int newValue) {
if (value == expectedValue)
value = newValue;
return value;
}
}
public class CasCounter {
private SimulatedCAS value;
public int getValue() {
return value.getValue();
}
public int increment() {
int oldValue = value.getValue();
while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
oldValue = value.getValue();
return oldValue + 1;
}
}
一个CAS计数器程序。这是无锁定且无等待算法(书上说的,模拟机器指令CAS原语),想问下为什么不会等待,难道不会阻塞线程。。菜鸟求大神!!!!! 多线程 Java CAS计数器 --------------------编程问答-------------------- 楼主的这个程序里哪里有多线程? --------------------编程问答--------------------
public class CasCounter {
private SimulatedCAS value;
public int getValue() {
return value.getValue();
}
public int increment() {
int oldValue = value.getValue();
while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
oldValue = value.getValue();
return oldValue + 1;
}
}
这个类里面,没有任何的锁,因此称之为无所
当然,你可能会说,这个类调用了value.compareAndSwap(oldValue, oldValue + 1)方法,这个方法是加锁的,难道不会等待吗?
答案是,该函数是一个模拟实现,目的是告诉你该函数的具体含义。完全按照这个程序执行,当然会等待。但是,请注意,他只是模拟。在实际情况下,CAS是CPU的一个原语,该操作只占用一个时钟周期,是无需等待的。因此,在实际操作环境下,是无需等待的
补充:Java , Java SE