Exécution d'une fonction plusieurs fois automatiquement

cs_youness601 Messages postés 6 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 28 janvier 2011 - 28 janv. 2011 à 10:28
cs_youness601 Messages postés 6 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 28 janvier 2011 - 28 janv. 2011 à 20:03
Bonjour à tous,

mon but est d'exécuter une fonction chaque 30 secondes pour récupérer des infos d'une base de données. Je sais qu'il existe la fonction Thread.sleep(), mais cette dernière bloque la totalité du programme, Or l'objectif et d'appeler une méthode automatiquement chaque trentain de secondes sans blocage du programme.
SVP existe-t-il une méthode qui me permet de faire ce-là ?!

Merci d'avance :-)

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 janv. 2011 à 11:56
Salut,

Tu as déjà une partie de la réponse : Thread.sleep permet en effet de faire une pause dans l'exécution d'un thread. Si tu le lances dans le thread principal, forcément, ca bloque ton programme. Par contre, si tu crée un nouveau thread et que tu mets un Thread.sleep dedans, tu obtiendras un timer qui se déclenche toutes les x millisecondes.

Mais il y a plus simple pour faire ce que tu cherches à faire : la classe Timer
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
1
cs_youness601 Messages postés 6 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 28 janvier 2011
28 janv. 2011 à 20:03
Merci pour ta réponse,

Vraiment la classe Time permet de bien planifier et d'exécuter des tâches en arrière-plan, elle facilite la tâche :-)

Voici un petit exemple :
import java.util.Timer;
import java.util.TimerTask;
 
public class TimerTest {
 
/**
 * @param args
 */
public static void main(String[] args) {
System.out.println("starting MAIN");
Timer t = new Timer();
t.schedule(new TimerTask() {
int i = 0;
 
public void run() {
                                //répéter chaque 3 secondes 
System.out.println("timer exec n°:" + ++i);
}
}, 0, 3000);
 
callMyService();

System.out.println("end MAIN");
t.cancel();
}
 
private static void callMyService() {
System.out.println("DEBUT appel bloquant");
try {
                        //le programme va attendre 7 secondes
Thread.currentThread().sleep(7000);
System.out.println("FIN appel bloquant");
} catch (InterruptedException e) {
System.out.println("appel bloquant interrompu");
}
}
}
0
Rejoignez-nous