Salve a tutti!
il mio dubbio forse è dovuto ad un po di confusione dovuta all'overdose di codice che ho fatto oggi..![]()
Ho una classe che gestisce una HashMap.
Questo oggetto è condiviso da "N" thread, i quali possono chiamare i metodi di put, remove, e, metodi di lettura, che dopo piccole operazioni di contorno eseguono l'equivalente sulla HashMap.
La concorreza impone impone di "Sincronizzare" l'accesso a tali metodi.
Il mio dubbio e su oprezaioni del tipo
Sono operazioni di lettura che non sono sicuro ci sia la necessità di sincronizzare..codice:containsKey(key) get(key)
Nel secondo caso, sincronizzo solo il "put" mntre permetto a tutti l'esecuzione di containsKey()...codice:public MyClass(){ private HashMap map = new HashMap(); public synchronized void removeKey(String key){ map.remove(key); } public synchronized void addElem(String key, String elem){ if(!map.containsKey(key)) map.put(elem); } oppure: public void addElem(String key, String elem){ if(!map.containsKey(key)) syncronized(this){ map.put(elem); } } }

Rispondi quotando