ForkJoinPool
正如其他答案所提到的,此注释在标题“样式注释”下对此进行了解释,从而充分利用了罐头中compareAndSwap...
from的sun.misc.Unsafe
大部分出现的情况:do {} while (...)
ForkJoinPool
* There are several occurrences of the unusual "do {} while
* (!cas...)" which is the simplest way to force an update of a
* CAS'ed variable.
使用写while
带有空主体的-loop的选择do {} while (condition)
似乎是一种风格上的选择。在中HashMap
,这可能更清楚了,它恰巧在Java 8中进行了更新。
在Java 7中,HashMap
您可以找到以下代码:
while (index < t.length && (next = t[index++]) == null)
;
尽管围绕它的许多代码也已更改,但很明显,Java 8中的替换是:
do {} while (index < t.length && (next = t[index++]) == null);
第一个版本的缺点是,如果唯一的分号碰巧被删除,则它会根据下一行来更改程序的含义。
如下所示,while (...) {}
和生成的字节码do {} while (...);
略有不同,但在运行时不会以任何方式影响任何内容。
Java代码:
class WhileTest {
boolean condition;
void waitWhile() {
while(!condition);
}
void waitDoWhile() {
do {} while(!condition);
}
}
生成的代码:
class WhileTest {
boolean condition;
WhileTest();
Code:
0: aload_0
1: invokespecial #1
4: return
void waitWhile();
Code:
0: aload_0
1: getfield #2
4: ifne 10
7: goto 0
10: return
void waitDoWhile();
Code:
0: aload_0
1: getfield #2
4: ifeq 0
7: return
}