Anschnitte synchronisieren

wpb

Erfahrenes Mitglied
Hallo!

Habe eine Client- Server Anwendung implementiert, und verwende für manche Befehle EINEN UDPListener, den ich mir selbst gemacht habe.
Also wenn ich mehrere Clients verbunden habe, dann kann es ja sein, dass auf eine Methode gleichzeitig zugegriffen wird.
Ich habe die Listener Klasse von Thread abgeleittet. In der run()- Methode schau ich dann wann die Anfrage "richtig" ist.
Bsp.:
Code:
if (request.equals("!getAllUsers")) {
antwort schicken...

Hab mir gedacht, dass ich jetzt den Abschnitt synchronisiere.
Also:
Code:
synchronized(this) {
if (request.equals("!getAllUsers")) { ... }
}

Bringt das was? Hab bisher nur Methoden synchronisert, und da war ich mir auch nie so sicher. Und was bedeutet der Parameter this in dem Fall denn?
 
Code:
synchronized(this) {
if (request.equals("!getAllUsers")) { ... }
}

synchronized(this) bedeutet, dass this sozusagen als lock dient.
Das heißt, wenn noch jemand kommt mit dem gleichen Objekt(hier this) kann er nur in den synchronized Block rein, wenn in einem this synchrinozied Block noch niemand ist.

Und wenn du in anderen synchronized Blöcken, das gleiche Object als lock benutzt, werden diese auch geblockt.

Bei normalen synchronized Methoden wird auch this, als lock benutzt, d.h. wenn man mehrere synchronized Methoden hat, kann nur eine davon auf einmal laufen. Bei static synchronized Methoden ist der lock auf der Klasse.
 
Zuletzt bearbeitet:
Zurück