Comment synchroniser une variable statique entre les threads qui exécutent différentes instances d'une classe en Java?

Je sais que l'utilisation de la synchronize mot-clé avant une méthode apporte la synchronisation de l'objet. C'est, 2 threads s'exécutant sur la même instance de l'objet seront synchronisés.

Cependant, depuis la synchronisation est au niveau de l'objet, 2 threads s'exécutant différentes instances de l'objet ne seront pas synchronisées. Si nous avons une variable statique dans une classe Java qui est appelée par la méthode, que l'on voudrait être synchronisés sur l'ensemble des instances de la classe. Les deux instances sont en cours d'exécution dans les 2 threads différents.

Pouvons-nous obtenir une synchronisation de la manière suivante?

public class Test  
{  
   private static int count = 0;  
   private static final Object lock= new Object();    
   public synchronized void foo() 
  {  
      synchronized(lock)
     {  
         count++;  
     }  
  }  
}

Est-il vrai que, depuis, nous avons défini un objet lock qui est statique et nous utilisons le mot-clé synchronized pour que le verrouillage, la variable statique count est maintenant synchronisé entre les instances de la classe Test?

  • toutes ces réponses sont INUTILES à moins que le verrou de l'objet est déclarée FINAL!
  • Regardez aussi java.util.de façon concomitante.atomique.AtomicInteger
InformationsquelleAutor Anonymous | 2010-01-22