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原语),想问下为什么不会等待,难道不会阻塞线程。。菜鸟求大神!!!!!多线程JavaCAS计数器
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原语),想问下为什么不会等待,难道不会阻塞线程。。菜鸟求大神!!!!!多线程JavaCAS计数器
解决方案 »
- 不解,为什么这个结果i
- utf8编码问题,弄了好长时间,请大家帮个忙
- 关于毕业论文的撰写问题
- 继承关系中的构造器问题,困惑···
- JMF 语音视频问题
- 最近看了一下jdk1.5的新特性元数据,有问题要问大家,还有一个关于finalize()的权限问题
- 菜鸟问题:java 可不可以有类似资源文件的那种方式,将图片或其他资源做到一个执行文件里
- 想用java做一个bbs登陆的工具,到时一键上各大BBS.请大家给点思路,指引!
- java程序
- [Xalan + XPath]XPathAPI.selectNodeIterator()抛出TransformerException的奇怪问题
- jar包处于有韩文的路径下时无法运行
- java 绘图问题
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的一个原语,该操作只占用一个时钟周期,是无需等待的。因此,在实际操作环境下,是无需等待的