Comment faire un compteur Thread safe en java
Publié le 12 Octobre 2012
Le problème de jour consiste à devoir incrémenter un compteur global qui s'incrémente à chaque transaction.
Il y a bien sûr plusieurs thread qui peuvent générer des transactions simultanément, il faut donc prendre en compte tous les aspects de synchronisation.
ah oui et enfin le compteur doit boucler sur l'intervalle [0-9999].
On peut être tenter d'utiliser synchronized pour controler l'accès au compteur mais les classes Atomic permettent de s'en passer:
static final int MAX = 10000;
final AtomicInteger counter = new AtomicInteger(0);
counter.compareAndSet(Integer.MAX_VALUE, Integer.MAX_VALUE % MAX)
int getAndIncrementCounter() {
return counter.incrementAndGet() % MAX;
}