Ich habe Verständnisprobleme mit Locks. Angenommen, im Thread A gibt es ein Codeblock der synchronisiert ist. Nun ruft ein anderer Thread B diesen Codeblock auf. Erhält nun Thread B den Lock von Thread A und wenn der Codeblock von A beendet ist, wird der Lock wieder verfügbar?
Es können nur Codeblöcke oder Methoden und keine Variablen synchronisiert werden. Was geschieht aber im folgenden Code mit der Anweisung synchronized (letter)?
Rein semantisch geht es darum, dass die 20 gleichen Buchstaben vollständig ausgegeben werden, bevor der nächste Buchstabe behandelt wird.
Es können nur Codeblöcke oder Methoden und keine Variablen synchronisiert werden. Was geschieht aber im folgenden Code mit der Anweisung synchronized (letter)?
Code:
public class RunAdminLetter {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("A");
AdminLetter a1 = new AdminLetter(sb);
AdminLetter a2 = new AdminLetter(sb);
AdminLetter a3 = new AdminLetter(sb);
a1.start();
a2.start();
a3.start();
}
}
Code:
public class AdminLetter extends Thread {
private StringBuffer letter ;
public AdminLetter(StringBuffer buf) {
this.letter = buf;
}
public void run() {
synchronized (letter) {
int charValue = letter.charAt(0);
for (int i = 0; i < 20; i++) {
System.out.printf("%s", letter.toString());
}
letter = letter.replace(0, 1, String.valueOf( (char) (charValue + 1)));
}
}
}
Rein semantisch geht es darum, dass die 20 gleichen Buchstaben vollständig ausgegeben werden, bevor der nächste Buchstabe behandelt wird.
Zuletzt bearbeitet: