saschaaaaa
Goto Top

Unsynchronized Sleep in Synchronized Block

Hallo,

klingt erstmal doof, ist aber ganz wichtig.
Ich habe diesen Code:

public static void main(String blub){
	synchronized(this){
		Tue_etwas();
		Mach_noch_was();
		Und_noch_mehr();
		Und_das_Letzte();
	}
	System.out.println(i);
}
static int j = 5;
static int i = 0;
public static void Und_noch_mehr(){
	try{
		Thread.Sleep(10000);
	}catch(Exception e){}
	i = j;
}
@Override
public void keyPressed(KeyEvent e){
	j++;
}

Das ist ein ungetester Code und dient nur als Beispiel.
Wenn ich das jetzt starte (theoretisch), und 10 Tasten drücke, ist i immernoch 0 bei der Ausgabe, das soll synchronized ja bewirken!
aber wie schaffe ich es jetzt das NUR der Thread.Sleep "un-" synchronized ist? Alles andere soll synchronized sein!
"Und_das_letzte();" soll aber dennoch snychronized laufen...
Hat jemand eine Idee?

Mit freundlichen Grüßen
Sascha

Content-ID: 308310

Url: https://administrator.de/contentid/308310

Ausgedruckt am: 17.11.2024 um 19:11 Uhr

127103
Lösung 127103 27.06.2016 um 11:16:20 Uhr
Goto Top
Hi,

"Object.wait" statt "Tread.Sleep" benützen... das enfernt den Lock von deinem Synchronized Block.

Gruß c
Saschaaaaa
Saschaaaaa 27.06.2016 um 11:47:10 Uhr
Goto Top
Danke hat perfekt funktioniert!