Souvent, lorsqu'on parle des instances on fait référence aux objets qui représentent des instances de la classe Object.
Mais, aussi, chaque classe Java (code source) a une instance de la classe
Class
;
cette instance est créée automatiquement par la JVM lorsqu'elle charge en mémoire le code source de cette classe en mémoire.
Une classe Java
T
peut avoir donc deux types d'instances en mémoire :
-
Une seule instance de la classe
Class
qui représente une classe Java T
est créée automatiquement par la JVM lorsque la classe T
est utilisée pour la déclaration d'une variable.
L'instance de la classe peut aussi être créée explicitement en utilisant la méthode forName
de la classe Class
(Class.forName("T")
).
Cette instance est utilisée pour accéder aux membres statiques de la classe.
Lorsque une méthode statique est synchronisée, alors le verrouillage est appliquée sur cette instance.
-
Une ou plusieurs instances qui représentent les objets créés à partir d'une classe Java
T
en utilisant l'opérateur new
(new T()
).
Ces instances sont utilisées, typiquement, pour accéder aux membres non-statiques de la classe.
Lorsque une méthode non-statique est synchronisée, alors le verrouillage est appliquée sur l'instance dont le code est en cours d'exécution.
Il faut noter que le verouillage obtenu lors de l'appel d'une méthode statique synchronisée d'une classe
est différent de celui obtenu lors de l'appel d'une méthode non-statique synchronisée de la même classe.
Les deux verrous peuvent êtres obtenus par deux threads différents.