Wartezustand in Endlosschleife - bessere Alternativen

Status
Nicht offen für weitere Antworten.

JSteinhilber

Bekanntes Mitglied
Hallo,
in meiner Anwendung warte ich auf das Ende eines Threads in einer while-Schleife.
Während der Thread läuft ist die static-Variable "lockok" auf 0 gesetzt.
Der Thread selbst versucht einen Datensatz zu sperren. Sofern dies gelingt setzt er lockok auf 1, sofern nicht auf -1.
Das heißt die while-Schleife wird auf jeden Fall irgendwann abgebrochen.

Aber: Ich könnte mir gut vorstellen, daß es in Java vernünftigere Methoden gibt einen Wartezustand zu erzeugen, als das eigene Programm im Kreis drehen zu lassen.

Der entscheidende Teil ist die Schleife:
while(lockok == 0){
}

Könnte mir vielleicht jemand mit ein paar Stichworten auf die Sprünge helfen?

Herzlichen Dank und Grüße
Jürgen


Hier mein Code:
Code:
									setLockStatement((belegung[tspalte]+1 >=10 ? new Integer(belegung[tspalte]+1).toString()+"BEHANDLER" : "0"+(belegung[tspalte]+1)+"BEHANDLER"),aktuellerTag);
									new Thread(new LockRecord()).start();
									if(ansicht==NORMAL_ANSICHT){
											while(lockok == 0){
											}
											if (lockok > 0){
												Zeiteinstellen(e.getLocationOnScreen(),belegung[tspalte],aktiveSpalte[0]);
												oSpalten[tspalte].requestFocus();
											}else{
												lockok = 0;
												sperreAnzeigen();
											}
									}else{	//WOCHEN_ANSICHT muß noch entwickelt werden!
											while(lockok == 0){
											}
											System.out.println("Belegung:"+belegung[tspalte]+" Aktiver Block:"+aktiveSpalte[0]);
											Zeiteinstellen(e.getLocationOnScreen(),tspalte,aktiveSpalte[0]);											
											oSpalten[tspalte].requestFocus();
									}
									// Hier Titel setzen
[/quote]
 
S

SlaterB

Gast
mehr kann man nicht machen,
aber es muss noch ein Thread.sleep() rein, wenigstens 100ms oder so,
sonst belegt dieser Thread unnötig die gesamte CPU oder einen hohen Anteil je nach Anzahl laufender Threads

da du die Schleife mindestens 2x brauchst gehört sie in eine Unteroperation warteAufLock();
 
L

lohr

Gast
Du kannst den gesamten Thread Ablauf mit Methoden wie notify() und wait() steuern.
Such mal in dieser Richtung...
 
S

SlaterB

Gast
und wenn ich es nicht kennen würde, würde ich es manuell nachbauen denn ich kenne ja schon synchronized ;)

aber all die tollen Extras hielt ich hier nicht für passend bzw. dachte gar nicht dran,
wäre was anderes als ein einfaches Warten auf beliebige Zustandsänderung, bei denen der Änderer gar nicht wissen muss, dass gewartet wird

aber stimmt schon, macht das ganze sicherlich sauberer
 

tfa

Top Contributor
SlaterB hat gesagt.:
und wenn ich es nicht kennen würde, würde ich es manuell nachbauen denn ich kenne ja schon synchronized ;)
Du würdest wait/notify manuell mit synchronized nachbauen? Cool, zeig mal. :)
 

tfa

Top Contributor
wait/notify sind native und lassen sich nicht nachbauen - jedenfalls nicht so einfach mit synchronized.
 

sliwalker

Top Contributor
tfa hat gesagt.:
wait/notify sind native und lassen sich nicht nachbauen - jedenfalls nicht so einfach mit synchronized.


Kewl. Dann sind also doch runenverzierte Zaubersprüche in java enthalten? :)


Na klar kann man das "nachbauen". Die Qualität und Performance mal außer Frage, aber warum sollte das nicht gehen.
Das einzige was man dazu braucht ist syncronized, wie SlaterB schon sagte. Damit kann man zumindest schonmal Threads steuern. Nie den kaufmannsladen programmiert? Ein Höllenspaß :)

greetz
SLi
 

Marco13

Top Contributor
Es ging wohl eher darum, dass sie native sind, und man nicht 100% sicher sein kann, dass man sie mit nicht-nativen funktionen 1:1 nachbauen kann....
 

Pappenheimer++

Bekanntes Mitglied
Aber zumindest mit JNI müsste man ja alles nachbauen können. Wie sliwalker schon angedeutet hat: Die Schöpfer Javas und seiner Bibliotheken waren ja auch keine Zauberer.
 

tfa

Top Contributor
Mit JNI geht das, man muss letztendlich auf die entsprechenden Funktionen des Betriebssystems zurückgreifen.
Das neue Concurrency-Framework kommt übrigens ohne synchronized, wait und notify aus. Das ist alles nativ implementiert.
 

Marco13

Top Contributor
Naja, in den concurrenty-Klassen ist das ganze ziemlich "versteckt", und sie sind ja im wesentlichen ein (erweiterter(!)) "Ersatz" für den teilweise zu unflexiblen synchronized/wait/notify-Mechanismus, aber ohne die Stellen jetzt im einzelnen rausgefiltert zu haben: Einige greifen für die "ganz tiefliegenden" Sachen dann wieder auf native Methoden aus sun.misc.Unsafe zu....
 

JSteinhilber

Bekanntes Mitglied
Ausgangsfrage:
while(lockok == 0){
}
== Murks?

Thread.sleep(), nein besser wait()-notify(), oder doch synchronized?
Nein am Besten alles nachbauen, aber das geht ja nicht - Quark natürlich geht das !

Na dann ist ja jetzt alles klar.....ich glaube fast ich belaße es bei meiner Dilettanten-Schleife + Thread.spleep(100)

Herzliche Grüße
Jürgen
 

tfa

Top Contributor
Sorry, wir sind etwas abgedriftet. Das mit der Warteschleife und dem sleep ist schon ok so.
Wenn du dir das mit dem Lock ansehen willst, findest du hier ein Beispiel.
 

JSteinhilber

Bekanntes Mitglied
Hallo tfa,
verbindlichsten Dank für den Link - und bitte meinen süffisanten Ellenbogen-Check nicht überbewerten.

Ich bin in erster Linie gottfroh daß es dieses klasse Forum gibt.
Ich würde ansonsten mit meinem Unterfangen heil- und hemmungslos untergehen.
(Unterfangen: eine in 10 Jahren entstandene "Gewaltsanwendung" nach Java zu portieren ohne jegliche Java-Kenntnisse zu besitzen...)

Gruß
Jürgen
 

sliwalker

Top Contributor
JSteinhilber hat gesagt.:
(Unterfangen: eine in 10 Jahren entstandene "Gewaltsanwendung" nach Java zu portieren ohne jegliche Java-Kenntnisse zu besitzen...)


WoW. Mein Respekt.
Das ist sicherlich nicht ohne.
Viel Erfolg trotzdem/weiterhin?! :)

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Hilfe bei Endlosschleife Java Basics - Anfänger-Themen 2
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
noah1407 endlosschleife Java Basics - Anfänger-Themen 7
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
sserio Endlosschleife ja nein? Java Basics - Anfänger-Themen 13
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
S Endlosschleife - Warum? Java Basics - Anfänger-Themen 1
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Collatzfolge endlosschleife. Java Basics - Anfänger-Themen 4
D Array in Endlosschleife überschreibt vorherige Werte Java Basics - Anfänger-Themen 4
E Eulersche Zahl berechnen, Endlosschleife Java Basics - Anfänger-Themen 2
N Endlosschleife... Warum? Java Basics - Anfänger-Themen 12
P Kapselung Problem - Endlosschleife Java Basics - Anfänger-Themen 10
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
D Endlosschleife und ich komme nicht raus! Java Basics - Anfänger-Themen 8
N Erste Schritte Endlosschleife und Exception Java Basics - Anfänger-Themen 5
R Endlosschleife nach InputMismatchException Java Basics - Anfänger-Themen 2
S Endlosschleife? Java Basics - Anfänger-Themen 2
T Endlosschleife Java Basics - Anfänger-Themen 2
Z Endlosschleife Java Basics - Anfänger-Themen 6
T Endlosschleife Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
StupidAttack Endlosschleife, Sockets Java Basics - Anfänger-Themen 2
C ungewollte Abbrüche in einer Endlosschleife Java Basics - Anfänger-Themen 6
E komische endlosschleife Java Basics - Anfänger-Themen 6
7 Endlosschleife pausieren Java Basics - Anfänger-Themen 11
F .readLine() erzeugt endlosschleife Java Basics - Anfänger-Themen 4
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
R warum endlosschleife? Java Basics - Anfänger-Themen 7
W Fakultät, warum Endlosschleife? Java Basics - Anfänger-Themen 15
S JTable Endlosschleife Java Basics - Anfänger-Themen 5
J Aus endlosschleife kommen Java Basics - Anfänger-Themen 5
R Endlosschleife verhindert das Schließen des Fensters Java Basics - Anfänger-Themen 10
Povlsen84 Endlosschleife Java Basics - Anfänger-Themen 5
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
Antoras Endlosschleife Java Basics - Anfänger-Themen 8
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
N Endlosschleife? Java Basics - Anfänger-Themen 3
V mehrere Threads starten + Endlosschleife Java Basics - Anfänger-Themen 3
I Hilfe wer findet mein Fehler in bei der Endlosschleife Java Basics - Anfänger-Themen 7
G Sound/Endlosschleife/Abbruchproblem Java Basics - Anfänger-Themen 3
G HappyNumbers - Endlosschleife Java Basics - Anfänger-Themen 11
0 Endlosschleife beim Integer Array mischen? Java Basics - Anfänger-Themen 3
M OutputStream funktioniert nur in Endlosschleife ? Java Basics - Anfänger-Themen 4
G Endlosschleife, aber warum? Java Basics - Anfänger-Themen 12
G Endlosschleife beenden Java Basics - Anfänger-Themen 10
T KLasse das bessere Array Java Basics - Anfänger-Themen 16
M Bessere bzw. kürzere Variante für Code? Java Basics - Anfänger-Themen 2
cyro Best Practice Bessere Alterative zu ArrayList gesucht Java Basics - Anfänger-Themen 3
O Funktioniert dies? Und gibt es eine bessere Lösung? Java Basics - Anfänger-Themen 6
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
S Bessere Lösung? Java Basics - Anfänger-Themen 4
S Bessere Lösung zu häufigem instanceof Java Basics - Anfänger-Themen 25
F bräuchte eine bessere entwicklungsumgebung Java Basics - Anfänger-Themen 2
S unschöne schleifen.jemand ne bessere idee Java Basics - Anfänger-Themen 4
S LineNumberReader - bessere Lösung möglich? - Log4J Java Basics - Anfänger-Themen 9
G Bessere Lösung für SQL STMNT ? (Schneller?) Java Basics - Anfänger-Themen 4
G was ist die bessere Variante Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben