1Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
249
249
EMPFEHLEN
-
Hallo
nur kurz eine Frage, in der Klasse java.util.concurrent.Semaphore bin ich über folgenden Code gestolpert:
Code java:1 2 3 4 5 6 7
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?
.bileWandering in Greyhawk...
-
20.04.10 10:41 #2
Moin,
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ß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
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
Wandering in Greyhawk...
-
20.04.10 11:29 #4
Meinst Du "do ... while" ?
Du musst hierbei nur aufpassen, dass dabei ggf. die Bedingung zuletzt geprüft wird !
Beispiel:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// 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ß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
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
.bileGeändert von bile (20.04.10 um 13:27 Uhr)
Wandering in Greyhawk...
-
Ob man for( ;; ) oder while(true) verwendet, ist nur eine Frage des persönlichen Stils; die erste Variante ist kürzer (Programmierer sind tippfaul
), die zweite ist für Ungeübte leichter zu verstehen.
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.





Zitieren

Login





