我學習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