Dernièrement, j'ai utilisé des boucles avec de grands nombres pour imprimer Hello World
:
int counter = 0;
while(true) {
//loop for ~5 seconds
for(int i = 0; i < 2147483647 ; i++) {
//another loop because it's 2012 and PCs have gotten considerably faster :)
for(int j = 0; j < 2147483647 ; j++){ ... }
}
System.out.println(counter + ". Hello World!");
counter++;
}
Je comprends que c'est une façon très idiote de le faire, mais je n'ai encore jamais utilisé de bibliothèques de minuterie en Java. Comment modifierait-on ce qui précède pour imprimer toutes les 3 secondes?
Réponses:
Vous pouvez également jeter un oeil à
Timer
et lesTimerTask
classes que vous pouvez utiliser pour planifier votre tâche à exécuter toutes lesn
secondes.Vous avez besoin d'une classe qui étend
TimerTask
et remplace lapublic void run()
méthode, qui sera exécutée chaque fois que vous transmettez une instance de cette classe àtimer.schedule()
method.Voici un exemple, qui s'imprime
Hello World
toutes les 5 secondes: -la source
schedule
méthode à 2 paramètres s'exécutera une fois après le délai spécifié. Le paramètre 3schedule
ouscheduleAtFixedRate
devrait être utilisé.ExecutorService
pour ces tâches. C'est vraiment une grande amélioration par rapport à l'API Thread traditionnelle. Je ne l'ai simplement pas utilisé au moment de répondre.Timer timer = new Timer(true);
devrait être définitrue
comme un démon. Sauf si vous souhaitez que le minuteur fonctionne toujours après la fermeture de l'application.Si vous souhaitez effectuer une tâche périodique, utilisez un fichier
ScheduledExecutorService
. Spécifiquement ScheduledExecutorService.scheduleAtFixedRateLe code:
la source
TimerTask
variante. Fait intéressant, j'ai remarqué que la réponse acceptée n'est en fait pas correcte: \ L'âge des deux API mis à part,ScheduledExecutorService
est simplement plus intuitivement déclaratif. L'utilisation deTimeUnit
comme paramètre rend bien plus clair ce qui se passe. Fini le temps du code5*60*1000 // 5 minutes
.Runnable helloRunnable = () -> { /*code */ };
ce qui est encore plus beau;)Essayez de faire ceci:
Ce code exécutera l'impression sur la console Hello World toutes les 5000 millisecondes ( 5 secondes). Pour plus d'informations, lisez https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html
la source
Je le comprends avec une minuterie, j'espère que cela aide. J'ai utilisé une minuterie du
java.util.Timer
etTimerTask
du même paquet. Voir ci-dessous:la source
Vous pouvez utiliser
Thread.sleep(3000)
inside for loop.Remarque: cela nécessitera un
try/catch
blocage.la source
une boucle infinie est créée. La tâche du planificateur d'annonces est configurée.
la source
Le moyen le plus simple serait de mettre le thread principal en veille de 3000 millisecondes (3 secondes):
Cela arrêtera le thread au moins X millisecondes. Le thread pourrait dormir plus longtemps, mais cela dépend de la JVM. La seule chose garantie est que le thread dormira au moins ces millisecondes. Jetez un œil à la
Thread#sleep
doc:la source
L'utilisation
java.util.Timer
et laTimer#schedule(TimerTask,delay,period)
méthode vous aideront.la source
Voici le moyen simple d'utiliser le thread en java:
la source
Ce qu'il a dit. Vous pouvez gérer les exceptions comme vous le souhaitez, mais Thread.sleep (millisecondes); est la meilleure route à emprunter.
la source
Voici un autre moyen simple d'utiliser l'interface Runnable dans Thread Constructor
la source
Ajouter
Thread.sleep
la source
Pour les petites applications, il est bien d'utiliser Timer et TimerTask comme Rohit l'a mentionné, mais dans les applications Web, j'utiliserais Quartz Scheduler pour planifier des tâches et effectuer de telles tâches périodiques.
Voir les tutoriels pour la planification Quartz.
la source
la source