¿En qué situaciones puede ser más eficiente que el tiempo?

Mientras que vs hacer mientras

Mientras que y do-while son funcionalmente equivalentescuando los bloques estan vacios, aunque a la vez parezca más natural:

do {} while (keepLooping());
while (keepLooping()) {}

Un caso típico de uso de while / do-while con un bloque vacío es forzar una actualización de objetos atómicos con un compareAndSet (CAS). Por ejemplo, el siguiente código se incrementaráa de una manera segura para subprocesos:

int i;
AtomicInteger a = new AtomicInteger();
while (!a.compareAndSet(i = a.get(), i + 1)) {}

Contexto

Varias partes de java.util.concurrent usan eldo {} while (...) idioma para las operaciones de CAS y el javadoc deForkJoinPool explica:

Hay varias ocurrencias de lo inusual.do {} while (!cas...) que es la forma más sencilla de forzar una actualización de una variable CAS'ed.

Ya que admiten que es inusual, supongo que significabanmejor más bien quemas simple.

Pregunta

Hay situaciones dondedo {} while (!cas) puede ser más eficiente quewhile (!cas) {} ¿Y por qué motivos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta