Mögliche Duplizieren:
Avoid synchronized(this) in Java?Synchronisation auf "diesem" oder privaten Objekt in Java?
Was ist der Unterschied zwischen den beiden Teilen des Codes? Was sind Vor- und Nachteile von jedem?
1)
public class Example {
private int value = 0;
public int getNextValue() {
synchronized (this) {
return value++;
}
}
}
2)
public class Example {
private int value = 0;
private final Object lock = new Object();
public int getNextValue() {
synchronized (lock) {
return value++;
}
}
}
Der zweite Ansatz ist fast immer besser (AFAIK) - aber warum? Welche negativen Auswirkungen hat die Sichtbarkeit von "diesem" (nur "das Objekt" von außen)? Wie kann "schlechter Code" eine Störung des Synchronisationsziels verursachen? –
Ist Ihnen bekannt, dass 'pubilc synchronized int getNextValue() {...} 'genau dasselbe ist wie' public int getNextValue() {synchronized (this) {...}}'? – Miquel