我学习java.util.concurrent
库,并在源代码中找到很多无限循环,像这样的java.util.concurrent中的代码审查
//java.util.concurrent.atomic.AtomicInteger by Doug Lea
public final int getAndSet(int newValue) {
for (;;) {
int current = get();
if (compareAndSet(current, newValue))
return current;
}
}
我不知道,在什么情况下,实际值可能不相等到期望值(在这种情况下compareAndSet
返回false)?
这是不是真的“无限”,因为其他线程保持你的*获取之后,对“无限”修改值的概率()*和你的* compareAndSet前右()*是如此之低,这是不是一个问题。在你被闪电击中的那天赢得全国彩票的可能性要高于你所写的无限循环。 – SyntaxT3rr0r 2011-02-06 12:54:17
@ SyntaxT3rr0r,你可能不会参加国家彩票) – 2011-02-06 12:59:51
@Stats,我强烈建议阅读一些理论。这里有一些初学者友好的文章:http://www.ibm.com/developerworks/java/library/j-jtp11234/ – bestsss 2011-02-06 13:33:38