在Java 8的Spliterator中使用的奇怪循环

有人知道为什么java.util.Spliterator实现使用do-while而不是while循环,当循环体是空的时候? 例如, forEachRemaining的实现是:

 default void forEachRemaining(Consumer action) { do { } while (tryAdvance(action)); } 

他们为什么要用

 do { } while (tryAdvance(action)); 

代替

 while(tryAdvance(action)); 

我不知道有什么好处吗?

逻辑检查在do {}的主体之后执行。 这可以通过多种方式使用,但与最后使用逻辑检查的while循环相同。 因为do {}是空的,所以线程将一直等到被通知然后执行逻辑检查而不是执行逻辑检查然后如果是等待。