Come premessa vi dico che la classe che sto costruendo è da inserire in un contesto di un'applicazione web based ed in particolare all'interno di alcune servlet (in realtà tutte). Inoltre questa classe è costruita utilizzando un design pattern singleton e quindi tutti i thread che vengono lanciati (i.e. servlet) utilizzarano tutte una singola istanza di questa mia classe.
Arriviamo al problema![]()
Ho dichiarato in questa classe due oggetti jdom.Document che come ben saprete servono per mantenere in memoria un file xml e ho pensato di dichiararli come attributi di classe in modo tale che tutti i metodi che li utilizzano non fossero costretti a rileggere l'intero file prima di poter operare . Per realizzare cio ho messo nel costruttore (che per come è struttaro il singleton si trova già in un blocco sincronizzato) operazioni di questo tipo :
.codice:documentObjectXML = saxBuilder.build(new File(objPathXML));
che caricano effettivamente in Document il contenuto xml.
Adesso nella mia classe tutti i metodi utilizzano questi due oggetti document o per fare un lettura di dati o per scriverci su e a me pare tanto che questa sia una situazione in cui cè tanto bisogno di sincronizzare le letture e le scritture![]()
La mia prima idea è stata quella di dichiarare synchronized tutti i metodi della mia classe ma il piccolo problema è che visto che ho 6 metodi che leggono ( che tra le altre cose sono sicuramente le operazioni che vengono piu utilizzate) e solo 2 che scrivono (con una bassa percentuale di utilizzo) allora mi troverei in una situazione che anche in presenza di 100 letture , che potrebbero avvenire in parallelo , queste risulterebberto tutte loccate tra loro.
Poi guardando la documentazione (javadoc) di jdom nn sono riuscito a capire se queste siano classi che in qualche modo sono già sincronizzate , in realtà nenche so come si fa ( qualcuno me lo spiega) , perche in tal caso nn ci sarebbe neanche bisogno di sincronizzare i miei metodi.
http://www.jdom.org/docs/apidocs/org/jdom/Document.html
Avete qualche consiglio per uscire da questa situazione ?
Bella pe tutti![]()

). Inoltre questa classe è costruita utilizzando un design pattern singleton e quindi tutti i thread che vengono lanciati (i.e. servlet) utilizzarano tutte una singola istanza di questa mia classe.
) , perche in tal caso nn ci sarebbe neanche bisogno di sincronizzare i miei metodi.
Rispondi quotando