Unsynchronized Sleep in Synchronized Block
Hallo,
klingt erstmal doof, ist aber ganz wichtig.
Ich habe diesen Code:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 308310
Url: https://administrator.de/contentid/308310
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
2 Kommentare
Neuester Kommentar
Hi,
"Object.wait" statt "Tread.Sleep" benützen... das enfernt den Lock von deinem Synchronized Block.
Gruß c
"Object.wait" statt "Tread.Sleep" benützen... das enfernt den Lock von deinem Synchronized Block.
Gruß c