PDA

View Full Version : [Java] Thread che parte ad intervalli regolari per svolgere delle operazioni.........


ChriD
07-11-2008, 14:44
Avrei bisogno di qualche dritta per realizzare un thread che ad intervalli regolari venga eseguito!

Devo gestire una sorta di cache per dei dati che sono memorizzati su un database!

Spiego meglio il problema che devo risolvere!
Ho dei dati indicizzati tramite una chiave memorizzati un un database.... poichè è possibile che più colte vengano richiesti gli stessi dati vorrei memorizzarli all'interno di un HashMap e restituirli direttamente nel caso in cui siano presenti, viceversa li andrei a prelevare dal database, poi li andrei ad inserire nell'HashMap e infine restituirli.....

Cosa succede se però questi sono troppo vecchi o l'HashMap diventa troppo grande?? Per questo motivo ho bisogno di un thread che ad ogni tot di tempo vada ad effettuare dei controlli.....

Quello di cui ho bisogno è non come si scrive un thread, ma come far si che ad intervalli regolari esso venga invocato....

Esiste una qualche classe Interval, o magari qualche metodo setInterval(Thread, millisecondi) per esempio???

british
07-11-2008, 15:40
Avrei bisogno di qualche dritta per realizzare un thread che ad intervalli regolari venga eseguito!


dai un occhio alla classe java.util.Timer

ma sei sicuro che ciò ti serva davvero? non te la potresti cavare effettuando il controllo su dimensione e stato di aggiornamento temporale della tua cache durante l'accesso alla stessa?

ciao!

british

banryu79
07-11-2008, 15:49
ma sei sicuro che ciò ti serva davvero? non te la potresti cavare effettuando il controllo su dimensione e stato di aggiornamento temporale della tua cache durante l'accesso alla stessa?


Quoto: potresti semplicemente creare una classe che wrappi l'HashMap e contenga il timestamp dei dati caricati nella stessa.
Ogni volta che devi accedere ai dati prima consulti questa cache e se i dati non sono presenti oppure sono più vecchi in un intervallo da te scelto li recuperi ex novo dal db sottostante.

ChriD
07-11-2008, 15:56
dai un occhio alla classe java.util.Timer

ma sei sicuro che ciò ti serva davvero? non te la potresti cavare effettuando il controllo su dimensione e stato di aggiornamento temporale della tua cache durante l'accesso alla stessa?

ciao!

british

Per quello che riguarda l'aggiornamento temporale potrei farlo sicuramente come dici tu, ossia qualche controllo quando ci accedo nel leggere i dati, ma per quello che riguarda la dimensione, non mi voglio ridurre ad eliminare i dati a casaccio o svuotare del tutto la HashMap, ma fare un controllo sui dati che sono meno richiesti (dal punto di vista del tempo e forse anche degli accessi), ed essendo un server quello che sto realizzando, vorrei lascirlo libero di elaborare altre richieste mentre questa sorta di "garbage collector" lavora!

Grazie della dritta....

Le classi Timer + TimerTask sono quello che cercavo ;)

ChriD
07-11-2008, 15:59
Quoto: potresti semplicemente creare una classe che wrappi l'HashMap e contenga il timestamp dei dati caricati nella stessa.
Ogni volta che devi accedere ai dati prima consulti questa cache e se i dati non sono presenti oppure sono più vecchi in un intervallo da te scelto li recuperi ex novo dal db sottostante.

I dati da gestire sono tanti e un Timestamp in un wrapper della HashMap credo sarebbe troppo riduttivo.....

I dati posso essere inseriti nella Map in tempi diversi e richiesti con frequenze differenti, quindi devo gestire ciascuna entry come un caso a parte!

banryu79
07-11-2008, 16:03
I dati posso essere inseriti nella Map in tempi diversi e richiesti con frequenze differenti, quindi devo gestire ciascuna entry come un caso a parte!
Ok, messa così è diverso, avevo immaginato la cosa fosse più semplice.