2010-07-25 4 views
4

Lorsque vous avez une méthode telle que:Bloc synchronisé équivalent à la méthode statique synchronisée?

public synchronized void addOne() { 
    a++; 
} 

il est équivalent à ce qui suit: (corrigez-moi si je me trompe)

public void addOne() { 
    synchronized(this) { 
     a++; 
    } 
} 

Mais quel est l'équivalent à ce qui suit méthode ?:

public static synchronized void addOne() { 
    a++; 
    // (in this case 'a' must be static) 
} 

Qu'est-ce qu'un bloc synchronisé qui agit même comme méthode synchronisée statique? Je comprends que la méthode statique synchronisée est synchronisée sur la classe et non sur l'instance (puisqu'il n'y a pas d'instance), mais quelle est la syntaxe pour cela?

+0

double possible de [Java méthodes synchronisées: verrouillage sur l'objet ou la classe] (http://stackoverflow.com/questions/437620/java-synchronized-methods-lock-on-object-or-class) Eh –

+0

, mais cette question n'a pas l'extrait de code que Quartermeister a signalé. Je pense que c'est distinct et bon à avoir sous la main. – Ricket

Répondre

10

Cela équivaut à un verrouillage sur l'objet de classe. Vous pouvez obtenir une référence à l'objet de classe en écrivant le nom de classe suivi de .class. Donc, quelque chose comme:

synchronized(YourClass.class) { 
} 

Voir la Java Language Specification, Section 8.4.3.6 synchronized Methods:

Une méthode synchronisée acquiert un verrou (§17.1) avant son exécution. Pour une méthode de classe (statique) , le verrou associé à l'objet Class pour la classe de la méthode est utilisée. Pour une méthode d'instance , le verrou associé avec ceci (l'objet pour lequel la méthode a été appelée) est utilisé.

Questions connexes