for(;;)

bile

Mitglied
Hallo

nur kurz eine Frage, in der Klasse java.util.concurrent.Semaphore bin ich über folgenden Code gestolpert:

Java:
for (;;) {
                int available = getState();
                int remaining = available - acquires;
                if (remaining < 0 ||
                    compareAndSetState(available, remaining))
                    return remaining;
            }

den Aufruf for( ; ; ) hab ich so noch nie gesehen, ist das im wesentlichen das selbe wie while(true) oder besser: was ist der Witz davon hier nicht while(true) zu verwenden?

.bile
 
Moin,

nur kurz eine Frage, in der Klasse java.util.concurrent.Semaphore bin ich über folgenden Code gestolpert:

java Code:
for (;;) {

int available = getState();

int remaining = available - acquires;

if (remaining < 0 ||

compareAndSetState(available, remaining))

return remaining;

}




den Aufruf for( ; ; ) hab ich so noch nie gesehen, ist das im wesentlichen das selbe wie while(true) oder besser: was ist der Witz davon hier nicht while(true) zu verwenden?

im Prinzip hast Du Recht ... beides sind quasi Endlosschleifen, die jeweils solange laufen, bis sie irgendein RETURN beendet (!)
Dass sich FOR- und WHILE-Schleifen vom Prinzip her leicht unterscheiden, ist Dir klar ?

Aber in diesem Fall sollte die Verwendung IMHO völlig egal sein ...

Gruß
Klaus
 
Danke für die schnelle Antwort.

das Prinzip der beiden Schleifen ist mir klar, ja ;)

bis anhin kamen mir bei der Arbeit und in Vorlesungen halt immer nur die klassischen while(true) zu Gesicht.
Hab in der Zwischenzeit noch eine Angabe bei Java ist auch eine Insel gefunden:
hier, wen's interessiert
Demnach sind die Schleifen tatsächlich äquivalent. Ich dachte, dass sich hier noch irgendwo ein raffinierter Unterschied findet, den ich nicht sehe ;)
 
Meinst Du "do ... while" ?
Du musst hierbei nur aufpassen, dass dabei ggf. die Bedingung zuletzt geprüft wird !

Beispiel:
Java:
// hier wird "tue irgendwas" genau 10x ausgeführt
for( int i = 0; i < 10; i++ )
{
    // tue irgendwas
}

// ----------------------------

// hier wird "tue irgendwas" solange ausgeführt, wie "Bedingung" erfüllt
// u. U. also gar nicht, wenn "Bedingung" VOR der Schleife nicht erfüllt ist
while( Bedingung )
{
    // tue irgendwas
}

// ----------------------------

 // hier wird "tue irgendwas" solange ausgeführt, wie "Bedingung" erfüllt,
// mindestens aber einmal, da "Bedingung" erst am Ende geprüft wird  !
do
{
     // tue irgendwas
 }
while( Bedingung );  // man beachte das Semikolon !

Gruß
Klaus
 
ich meine nur für den infiniten Fall. for( ; ; ) und while(true) laufen in jedem Fall bis zum ersten return, break etc.
Die Race Condition ist ja sowieso true -> die Schleifen sind für den speziellen Fall hier äquivalent.

Inwiefern sich die parametrisierten Schleifen unterscheiden ist mir schon klar :D

.bile
 
Zuletzt bearbeitet:
Ob man for( ;; ) oder while(true) verwendet, ist nur eine Frage des persönlichen Stils; die erste Variante ist kürzer (Programmierer sind tippfaul:D), die zweite ist für Ungeübte leichter zu verstehen.
 
Zurück