mercredi 10 août 2016

Implementing counter refs

I want to implement a kind of counter approach.
The solution for now is something like:

HashMap<Integer, Integer> listeners = new HashMap<>();  

public void increaseListener(int id) {  
    synchronized(listeners) {  
       if(listeners.containsKey(id)) {  
          listeners.put(id, listeners.get(id) + 1);  
       }  
       else {  
          listeners.put(id, 1);  
       }  
    }  
}  

public void decreaseListener(int id) {  
   synchronized(listeners) {   
   if(listeners.containsKey(id)) {  
      return;
   } 
   listeners.put(id, listeners.get(id) - 1);  
   if(listeners.get(id) == 0) {  
     // no more listeners do something 
   }   
  }  
}    

Is there a better way to do it? E.g. replacing hashmap with some other constructs or instead of integers have atomic references or some other way?

Aucun commentaire:

Enregistrer un commentaire