Exécution d'une fonction plusieurs fois automatiquement

Signaler
Messages postés
6
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
28 janvier 2011
-
cs_youness601
Messages postés
6
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
28 janvier 2011
-
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 :-)
A voir également:

2 réponses

Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
94
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
Messages postés
6
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
28 janvier 2011

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");
}
}
}