synchronisé Vu ce code:Comprendre
public class Messager implements Runnable {
public static void main(String[] args) {
new Thread(new Messager("Wallace")).start();
new Thread(new Messager("Gromit")).start();
}
private String name;
public Messager(String name) { this.name = name; }
public void run() {
message(1); message(2);
}
private synchronized void message(int n) {
System.out.print(name + "-" + n + " ");
}
}
Je comprends que le mot-clé synchronized
fait le fil dépend de verrouillage de l'objet. Questions:
a) Le verrou est-il libéré dès que la méthode marquée synchronized
est terminée? Ou dès que la méthode run()
du thread se termine b) Puis-je m'assurer que l'un des threads affichera son nom et 1 2
avant l'autre?
Vous êtes en train de verrouiller sur deux instances différentes là-bas, donc 'sycnhronized' ne fera rien. (Explicitement en utilisant le bloc 'synchronized' plutôt que le modificateur rend les choses plus claires.Mieux utiliser un objet de verrouillage séparé.) –