Hallo!
Mir ist nicht ganz klar, was ich bei einem synchronised-Block als Parameter angeben kann.
Da muss ja das Objekt oder die Klasse hin, deren intrisic lock ich haben möchte. Aber ich verstehe nicht genau, welche Klassen und Objekte das sein können. Immer nur die Klasse oder das Objekt, deren Methode ich aufrufe? D. h. ich kann "this" (gesamte Instanz der Klasse blablabla) , "blabla.class" oder ein Instanzfeld der Klase blablabla als lock nehmen? Und bei "this" habe ich den Nachteil, dass ich den lock für alle synchronised-Blöcke gleichzeitig erwerbe. Oder wieso macht mann z. B. Folgendes?
D. h. dadurch sorge ich dafür, dass mein Objekt mehrere locks hat und nicht nur einen?
Mir ist nicht ganz klar, was ich bei einem synchronised-Block als Parameter angeben kann.
Da muss ja das Objekt oder die Klasse hin, deren intrisic lock ich haben möchte. Aber ich verstehe nicht genau, welche Klassen und Objekte das sein können. Immer nur die Klasse oder das Objekt, deren Methode ich aufrufe? D. h. ich kann "this" (gesamte Instanz der Klasse blablabla) , "blabla.class" oder ein Instanzfeld der Klase blablabla als lock nehmen? Und bei "this" habe ich den Nachteil, dass ich den lock für alle synchronised-Blöcke gleichzeitig erwerbe. Oder wieso macht mann z. B. Folgendes?
Code:
public class MsLunch { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; } } public void inc2() { synchronized(lock2) { c2++; } } }
Comment