В каких ситуациях можно сделать время более эффективным, чем время?

Хотя против делай время

Пока и делай пока функционально эквивалентныкогда блоки пусты, хотя пока кажется более естественным

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

Один типичный случай использования while / do-while с пустым блоком - принудительное обновление атомарных объектов с помощью CompareAndSet (CAS). Например, приведенный ниже код будет увеличиватьсяa потокобезопасным способом:

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

контекст

Несколько частей java.util.concurrent используютdo {} while (...) идиома для операций CAS и JavadocForkJoinPool объясняет:

Есть несколько случаев необычногоdo {} while (!cas...) что является самым простым способом форсировать обновление CAS 'переменная

Поскольку они признают, что это необычно, я полагаю, они имели в видуЛучший скорее, чемПростейшие.

Вопрос

Есть ли ситуации, когдаdo {} while (!cas) может быть более эффективным, чемwhile (!cas) {} а по каким причинам?

Ответы на вопрос(3)

Ваш ответ на вопрос