Salve a tutti devo implementare una funzione che scatta ad una determinata ora di ogni giorno ad esempio alle 14:01... mi sapete indicare cosa devo utilizzare?
Grazie
Salve a tutti devo implementare una funzione che scatta ad una determinata ora di ogni giorno ad esempio alle 14:01... mi sapete indicare cosa devo utilizzare?
Grazie
Ciao,
puoi provare a leggere qui.
![]()
Salve a tutti,
dovrei impostare una struttura in java che faccia quanto segue: ad ogni ora chiama una funzione B, ogni giorno chiama una funzione B, una volta la settimana chiama una funzione B e una volta al mese chiama una funzione B... secondo voi lo scheletro è corretto? Per favore mi date qualche dritta??
In sintesi devo realizzare una schedulazione oraria,giornaliera, settimanale, mensile.
Chi di voi sa dirmi se l'impostazione è corretta???codice:public void avviaReport(String path_base_report) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar corrente = new GregorianCalendar(); Calendar precedente= new GregorianCalendar(); while(true){ // schedulazione oraria .... if(corrente.get(Calendar.HOUR_OF_DAY)!=precedente.get(Calendar.HOUR_OF_DAY)) { // schedulazione oraria funzioneB(); } // Schedulazione Giornaliera if(corrente.get(Calendar.DAY_OF_MONTH)!=precedente.get(Calendar.DAY_OF_MONTH)) { // schedulazione giornaliera funzioneB(); } // Schedulazione settimanale if(corrente.get(Calendar.DAY_OF_WEEK)==1) { // ogni lunedì funzioneB(); } //Schedulazione mensile if(corrente.get(Calendar.DAY_OF_MONTH)==1) { // ogni primo del mese funzioneB() } precedente=corrente; corrente=new GregorianCalendar(); } }
Concettualmente: per la schedulazione oraria e giornaliera giustamente "senti" il cambiamento. Per settimanale/mensile no, non è corretto, perché non verifichi il cambiamento.
A parte questo, se vuoi perseverare su questa strada metti almeno uno "sleep" nel while, perché altrimenti il tuo loop sta perennemente in esecuzione, "consuma" solo CPU inutilmente oltre al fatto che ovviamente tiene impegnato il thread che sta eseguendo avviaReport.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Come dice Andbin col tuo codice ti mangi troppo cicli macchina e potrebbe arrivare a crasharti il sistema.
Puoi provare a a cercare qualche libreria che faccia al caso tuo penso che ne esistano in quantità...
se trovo qualcosa te la posto qui.
Ciao
http://www.appuntisoftware.it/quartz...processi-java/
Ultima modifica di schumy2000; 26-04-2014 a 11:51
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
Insieme sono una potenza che supera l'immaginazione.
A.Einstein
Lo sleep tecnicamente lo puoi mettere dentro il while, all'inizio o alla fine ... non è molto importante. Come tempo di sleep puoi mettere es. 1 secondo ma anche ad esempio 1 minuto (così però il tuo algoritmo potrebbe essere in errore nel riconoscere il cambio di appunto 1 minuto).
Nota: Thread.sleep accetta millisecondi e può lanciare InterruptedException che va considerata.
Nel concetto dei tuoi test però c'è anche molta "sovrapposizione". Quando il mese cambia, è anche il cambio del giorno e dell'ora! E potrebbe pure essere il cambio della settimana. Quindi es. quando cambia il mese vuoi fare 3/4 volte funzioneB oppure solo una volta?
Hai considerato questo aspetto?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet