Visualizzazione stampabile
-
TimerTask
Ciao ragazzi, ho un problema che non riesco a risolvere. Ho realizzato una specie di orologio che ogni secondo fa partire un Timer (alla fine si tratterebbe di n thread). Ogni Thread che parte fa una determinata logica, per esempio colora un testo, salva un record sul db etc etc. I Timer lanciati sono circa 400. Dopo 1 minuti circa, mi accorgo che il timer non è più sincronizzato col tempo reale. Per esempio passa un secondo nella realtà e invece nell’orologio dell’app ancora deve scattare. E’ possibile che dopo n thread lanciati si sputtani qualcosa?
Grazie mille
Ciao Salvo
-
Vatti a leggere un pò di materiale sui thread, su cos'è lo scheduling e come il sistema gestisce queste due cose.
Oltre ai thread relativi alla tua applicazione, il sistema deve far girare altre applicazioni ed altrettanti thread, e l'uso della cpu non è certamente riservato per un tempo indefinito ad un unico thread. Di conseguenza ogni thread occupa la cpu per un certo lasso di tempo, viene "messo da parte" dal sistema allo scadere di questo tempo se ancora non ha terminato la sua esecuzione, un altra applicazione occuperà la cpu per un altro lasso di tempo, dopo alcuni istanti il tuo thread potrà di nuovo usufruire della cpu, e così via. Capisci perchè le tempistiche tra i tuoi differenti timer ed il tempo reale sono sballate.
-
Prova a dare un'occhiata al metodo scheduleAtFixedRate della classe Timer:
Timer (Java Platform SE 6)