Bonjour,
Je voudrais savoir sir un Thread héritant de la classe TimerTask peut être suspendu et relancer a une heure précise => par exemple le suspendre et le relancer a 06h00 du matin ?
Est ce que vous pouvez m'aider SVP ?
Merci infiniment.
Bonjour,
Je voudrais savoir sir un Thread héritant de la classe TimerTask peut être suspendu et relancer a une heure précise => par exemple le suspendre et le relancer a 06h00 du matin ?
Est ce que vous pouvez m'aider SVP ?
Merci infiniment.
C'est possible, à partir d'un Thread principal de contrôle...
La librairie Quartz offre des APIs plus poussées que le JDK pour le contrôle temporel d'exécution.
Cependant, attention à ce que fait ton thread et à ce que cette suspension soit correctement gérée.
Imaginons que ton Thread écrive dans une base de données. Si tu n'y prends pas garde, après la suspension, la connexion va tomber en timeout et être fermée par le serveur. Au moment du réveil du thread, sa connexion ne sera donc plus valide et il ne pourra poursuivre son traitement sans la réouvrir...
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
Merci beaucoup pour votre retour,
Mise à part cette solution, est ce que vous pensez que le faite de tester sur une variable boolean dans une boucle pourra être une solution (j'ai lu dans des articles que ce mécanisme a remplacer l'utilisation des méthode suspend() et resume() de la classe Thread dans JDK1.1)
Est ce que a votre avis ce genre de traitement présente des inconvenants ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 boolean testSiDeuxH = false; while(!testSiDeuxH){ Thread.sleep(600000); if(dateHeureDeuxH.equal(new Date()){ testSiDeuxH = true; break; } }
Merci infiniment.
Alors juste une petite coquille : c'est 60000, pas 600000 pour tester pour une minute.
Sinon, pour ne pas avoir de problème en cas de multithread, éviter d'avoir des variables temporaires autant que nécessaire.
Dans ton cas, ça donnerait quelque chose dans ce genre :
(Je n'ai pas testé le code, c'est possible qu'il reste des erreurs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Date heureH = new GregorianCalendar(2010,04,08,06,00).getTime(); while(!heureH.equals(new Date())){ try{ Thread.sleep(60000); } catch(InterruptedException ex){ // TODO: Sortie du programme, problème rencontré,... } } // TODO: Code à exécuter à l'heure H
Partager