Sono in una applicazione client server in cui il server che ha come campo un mappa, accetta delle richieste dai client ed le gestisce costruendo per ogni client un thread per effettuare delle operazioni su di un mappa, leggere o modificare alcune chiavi,
Ho usato la collezione thread-safe ConcurrentHashMap, ma se un thread modifica una chiave della mappa mi sono accorto che la modifica permane solo per la durata di vita del thread, credo sia un problema di memoria condivisa ma non sono riuscito a venirne a capo, mi potreste dare una mano per favore.
Mi posto un codice di esempio per far capire meglio cosa dovrei fare...
Mi aiutate con qualke buon consiglio..Graziecodice://La mappa è un campo privato della classe Server private ConcurrentHashMap<Integer,Controllo> mappa = new ConcurrentHashMap<Integer,Controllo>(); //Al server arriva una richiesta dal client che genera un thread per gestirla //il corpo del thread dovrebbe controllare il valore della chiave ed eventualmente settarla Controllo c = mappa.get(intero); if(!v.getFlag()){ v.setFlag(true); //Il rinserimento con la put della chiave nella mappa non dovrebbe essere //fatto ma comunque non funziona indipendentemente se viene fatto o meno mappa.put(intero,v); } else { System.out.println("Il valore della Flag : "+v.getFlag()); } //Un nuovo thread cha accede alla mappa dopo la fine dell'esecuzione //del thread percedente non trova le modifiche... ....

Rispondi quotando