Kleines Problem mit Threads (synchronized)

Status
Nicht offen für weitere Antworten.

MFM

Mitglied
Hi Leute,

ich habe hier zur Klausurvorbereitung ne Kleine Parkhaussimulation geschrieben.
Ich habe 1 Parkhaus mit 10 freien Plätzen und 40 Autos (wird alles in der main instanziiert)

Sobald ich aber bei 0 freien Plätzen ankomme, geht nix mehr. Ich nehme an, dass das daran liegt, dass ich, wenn ich im synchronized Block der einlass-Methode bin, der Scheduler keine anderen Threads mehr dranbringt.

Leider lässt sich das Problem aber auch nicht durch eine sleep-Anweisung dort lösen.

Für jeden Input wäre ich sehr sehr dankbar!

Java:
public class ParkhausSim {

	public static void main(String[] args){
		
		Parkhaus p1 = new Parkhaus(10);
		
		for(int i=1 ; i <=40; i++){
			Auto a = new Auto(p1);
			a.start();
			i++;
		}
	}
}

Java:
public class Auto extends Thread{
	
	public Parkhaus monitor;
	
	public Auto(Parkhaus monitor){
		this.monitor = monitor;
	}
	
	public void run(){
		
		// Auto ist auf der Strasse und 
		// "fährt" (schläft) eine random-Zeit (bis zu 10 Sekunden)
		// bis zum Parkhaus
		
		try {
			Thread.sleep((long)(10*Math.random()));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		// Dann versucht es, in das Parkhaus einzufahren
		synchronized(monitor){
			monitor.einlass();
		}
		
		// Im Parkhaus steht das Auto, bis der Besitzer nach einer
		// random-Zeit das Auto wieder abholt
		try {
			Thread.sleep((long)(10*Math.random()));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		// Und dann geht es wieder ab nach Hause
		synchronized(monitor){
			monitor.auslass();
		}
	}
}

Java:
public class Parkhaus {

	public int freie_plaetze;
	
	public Parkhaus(int plaetze){
		this.freie_plaetze = plaetze;
	}
	
	synchronized void einlass(){
		while(freie_plaetze == 0){
			// Solange das Parkhaus besetzt ist
			// warte hier an der Einlassschranke
			
			// und schau mal, ob nicht jemand mal rausfahren möchte
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		// Sobald wieder ein Platz frei wurde
		// oder eh schon mind. ein Platz frei war
		freie_plaetze--;
		System.out.println("Auto eingefahren: Es gibt noch " +freie_plaetze+ " freie Plaetze");
	}
	
	synchronized void auslass(){
		freie_plaetze++;
		System.out.println("Auto eingefahren: Es gibt wieder " +freie_plaetze+ " freie Plaetze");
	}	
}

LG MFM
 

Der Müde Joe

Top Contributor
>Sobald ich aber bei 0 freien Plätzen ankomme, geht nix mehr. Ich nehme an, dass das daran liegt, dass ich, wenn ich im synchronized Block der einlass-Methode bin, der Scheduler keine anderen Threads mehr dranbringt.

so auf die schnelle ja. Sobald du in der Endlosschleife bist, ist das Parkhaus gelockt.

Den synchronized(monitor) ist überflüssig. die Methode ist schon synchronized.

Der Aufbau ist irgendwie falsch. Ein Auto besitzt ein Parkhaus? Neeee. Ein Parkhaus besitzt x Autos.
 

Marco13

Top Contributor
Naja, "falsch" würd' ich nicht sagen. Die Autos sind die Threads, das passt, und die müssen was mit dem Parkhaus machen - nämlich reinfahren - und dazu müssen sie es zumindest kennen

Zum eigentlichen Problem: Das hängt vermutlich wirklich mit dem "while" in de synchronisierten einlass-Methode zusammen. Bildlich gesprochen: Es gibt keine Schranke, die den Einlass verweigert, sondern nur einen Pförtner, der die Autos am reinfahren hindert, und deswegen nicht mitkriegt, wenn ein anderes Auto rausfährt. Etwas weniger bildlich: Schau dir mal "wait" und "notify/notifyAll" an - ggf. mit sowas wie Guarded Blocks (The Java™ Tutorials > Essential Classes > Concurrency).
 

MFM

Mitglied
ja, so wie marco13 das geschrieben hat, hab ich das auch gemeint.

Das mit dem Monitor habe ich gemacht, weil die ja alle ins selbe Parkhaus fahren sollen.

Und in der Tat ist es so, dass ich durch die while-Schleife in einen Totzustand gerate (Deadlock).
Die Aufgabe habe ich dann auch mittels wait/notify gelöst.

Vielen Dank
MFM
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Methoden Kleines Problem mit meinem Glücksrad... Java Basics - Anfänger-Themen 9
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
J Vererbung Kleines Problem bei Vererbung! Java Basics - Anfänger-Themen 2
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
H Kleines Problem bei den Schleifen Java Basics - Anfänger-Themen 5
M Kleines Problem mit der Rekursion Java Basics - Anfänger-Themen 20
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
R Login mit Datenbankabfrage: Kleines Problem! Java Basics - Anfänger-Themen 6
K Kleines Anfänger Problem bei der Abfrage Java Basics - Anfänger-Themen 8
X Kleines JMenuBar Problem Java Basics - Anfänger-Themen 8
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
P wahrscheinlich ein kleines Problem Java Basics - Anfänger-Themen 7
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
K kleines Array-Problem Java Basics - Anfänger-Themen 6
C Kleines 2D Spiel. Problem. Java Basics - Anfänger-Themen 5
U Kleines Problem mit Konstruktor^^ Java Basics - Anfänger-Themen 7
D kleines Eclipse-Problem ! Java Basics - Anfänger-Themen 2
O Kleines Problem mit Konstruktor mit Parametern aus generischer Klasse...oder so ;) Java Basics - Anfänger-Themen 2
S Kleines Problem... NaN, Infinity? Java Basics - Anfänger-Themen 9
B Drag and Drop fähige Trackliste..nurnoch ein kleines Problem Java Basics - Anfänger-Themen 16
G Kleines Problem mit File Java Basics - Anfänger-Themen 7
G Kleines Problem mit Nimmspiel Java Basics - Anfänger-Themen 8
U kleines problem bei ner aufgabe :( Java Basics - Anfänger-Themen 8
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G Kleines Problem Java Basics - Anfänger-Themen 3
S Ich habe ein kleines Problem mit meinem Übungsprogramm Java Basics - Anfänger-Themen 7
S Hab ein kleines Problem :) Java Basics - Anfänger-Themen 4
D noch ein kleines Problem Java Basics - Anfänger-Themen 4
M kleines generics problem Java Basics - Anfänger-Themen 15
B Kleines? Jedenfalls Problem mit Borland-Together! Java Basics - Anfänger-Themen 4
D Kleines Problem mit JDBC Java Basics - Anfänger-Themen 2
D Hab ein kleines Problem mit setScreenSize Java Basics - Anfänger-Themen 2
B kleines Problem Java Basics - Anfänger-Themen 3
G Kleines Problem Java Basics - Anfänger-Themen 5
A Kleines bzw. großes Problem ! Java Basics - Anfänger-Themen 2
Y kleines Problem Java Basics - Anfänger-Themen 9
J Kleines Problem mit Checkbox Java Basics - Anfänger-Themen 5
N Kleines Problem mit meiner ersten Klasse Java Basics - Anfänger-Themen 5
0 Kleines Problem mit ArrayList Java Basics - Anfänger-Themen 25
N kleines Problem mit meiner Schleife Java Basics - Anfänger-Themen 8
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
T moin leute hab ein kleines aber pikantes problem Java Basics - Anfänger-Themen 10
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
G kleines problem beim einlesen Java Basics - Anfänger-Themen 3
C Erstes kleines Problem - string in chat ? Java Basics - Anfänger-Themen 9
megachucky kleines problem mit einer nullpointer exception Java Basics - Anfänger-Themen 2
N Kleines Problem! Java Basics - Anfänger-Themen 7
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
P Kleines Problem Java Basics - Anfänger-Themen 2
G Kleines Problem Java Basics - Anfänger-Themen 7
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
J Kleines Rechenprogramm Java Basics - Anfänger-Themen 13
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output Kleines Netzwerkproblem Java Basics - Anfänger-Themen 2
J OOP Kleines Schülerverwaltungsprogramm Java Basics - Anfänger-Themen 9
N ein kleines GUI mit einem hauch XML Java Basics - Anfänger-Themen 5
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
T erstes kleines Programm Java Basics - Anfänger-Themen 17
S Kleines Quiz Programm Java Basics - Anfänger-Themen 4
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
K Ein kleines Rätsel Java Basics - Anfänger-Themen 2
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
J kleines Karteikartenprogramm Java Basics - Anfänger-Themen 3
S Kleines Zeichen berechnen Java Basics - Anfänger-Themen 5
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
fLooojava Passwort generieren - kleines Programm Java Basics - Anfänger-Themen 15
H Kleines Prob Java Basics - Anfänger-Themen 5
J Flaechen vergleichen/kleines Fehler? Java Basics - Anfänger-Themen 23
K Kleines Projekt Java Basics - Anfänger-Themen 2
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
J Mal wieder ein kleines Toleranzproblem Java Basics - Anfänger-Themen 20
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
R Kleines Programm, benötige Hilfe! Java Basics - Anfänger-Themen 6
D Kleines Abfrageproblem Java Basics - Anfänger-Themen 3
K kleines Rekursionsproblem Java Basics - Anfänger-Themen 7
B Suche kleines Java-Applet Java Basics - Anfänger-Themen 6
P Kleines Problemm mit einer NullPointerException Java Basics - Anfänger-Themen 2
R kleines Kunstprogramm "mkbox" perfektionieren Java Basics - Anfänger-Themen 13
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
T Kleines Verständnissproblem mit Regex Java Basics - Anfänger-Themen 4
S Kleines Kartenspiel mit Java Java Basics - Anfänger-Themen 2
I Kleines Program, fehler? Java Basics - Anfänger-Themen 2
S kleines Würfelspiel Java Basics - Anfänger-Themen 10
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben