Condition Problem

Status
Nicht offen für weitere Antworten.

Sanix

Top Contributor
Hi,
Ich habe ein bisschen mit Locks rumexperimentiert, verstehe jedoch nicht, wieso ich hier eine IllegalMonitorStateException kriege:

Code:
public class Thread1 implements Runnable
{

	public static void main(String[] args) 
	{
		new Thread(new Thread1()).start();
	}
	
	public void run() 
	{
		Lock lock = new ReentrantLock();
		lock.lock();
		
		Condition cond = lock.newCondition();
		
		new Thread(new Thread2(cond)).start();
		
		try
		{
			System.out.println("Warte auf Signal");
			cond.await();
			System.out.println("Signal erhalten");
		}
		catch(Exception ex)
		{
			System.err.println(ex);
		}
	}

}



public class Thread2 implements Runnable
{
	Condition cond;
	
	public Thread2(Condition cond) 
	{
		this.cond = cond;
	}
	

	public void run() 
	{
		System.out.println("Hi, ich warte 5s");
		try
		{
			Thread.sleep(5000);
			System.out.println("Sende Signal");
			cond.signal();
		}
		catch(Exception ex)
		{
			System.err.println(ex);
		}
	}

}
 

HoaX

Top Contributor
weil du ein synchronized auf das objekt brauchst, bei dem du Object.wait() aufrufst.

steht auch breit in der api-doc: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait()
 

Sanix

Top Contributor
Ich habe die 2. Klasse wie folgt abgeändert:

Code:
public class Thread2 implements Runnable
{
	Condition cond;
	Lock lock;
	
	public Thread2(Condition cond, Lock lock) 
	{
		this.cond = cond;
		this.lock = lock;
	}
	

	public void run() 
	{
		lock.lock();
		System.out.println("Hi, ich warte 5s");
		try
		{
			Thread.sleep(5000);
			System.out.println("Sende Signal");
			cond.signal();
		}
		catch(Exception ex)
		{
			System.err.println(ex);
		}
	}

}


Nun kriege ich keine Exception mehr, das Signal wird gesendet, jedoch passiert nichts. Ich verstehe 2 Dinge nicht ganz:
- Ein lock lässt doch das Programm warten, wieso muss es in beiden Threads ausgeführt werden? Woher wissen die Threads, welcher zum Synchronisieren ist und welcher warten muss?
- Wieso funktioniert es immer noch nicht?
 
S

SlaterB

Gast
> Ein lock lässt doch das Programm warten, wieso muss es in beiden Threads ausgeführt werden?

falsch, ein lock macht nur das was sonst synchronized macht

> Woher wissen die Threads, welcher zum Synchronisieren ist und welcher warten muss?

beide synchronisieren, einer ruft await() auf

> Wieso funktioniert es immer noch nicht?

weil du das Beispiel aus dem Link nicht vollständig abgetippt hast?!

kleiner Rätsel-Tipp: bei normalen synchronized darf der aufgeweckte Thread erst dann weitermachen,
wenn der aufweckende Thread den synchronized-Block verlassen hat,
es darf immer nur ein Thread in einem synchronized-Block sein
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Race Condition mittels Semaphore verhindern Java Basics - Anfänger-Themen 13
H Datentypen "String" == "String" aber Condition greift nicht?!?!?! Java Basics - Anfänger-Themen 11
hdi Hilfe, was is da los (Race Condition?) Java Basics - Anfänger-Themen 2
G probleme, threads zu snychronisieren (race condition) Java Basics - Anfänger-Themen 4
N Threads über Condition synchronisierern Java Basics - Anfänger-Themen 2
U Race Condition Java Basics - Anfänger-Themen 25
L Sessionvariable für Condition in JSP benutzen Java Basics - Anfänger-Themen 3
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben