Comment puis-je retarder une boucle while à des intervalles de 1 seconde sans ralentir tout le code/l'ordinateur sur lequel il s'exécute sur le délai d'une seconde (juste la petite boucle).
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
Il semble que votre boucle fonctionne sur le fil principal et si vous faites sleep
sur ce fil, l'application sera suspendue (puisqu'il n'y a qu'un seul fil qui a été suspendu), pour résoudre ce problème, vous pouvez mettre ce code dans la nouvelle Thread
qui fonctionne en parallèle
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
//do stuff
}
Mes moyens simples de retarder une boucle.
J'ai déjà mis les codes ici après avoir omis de suivre les normes de stackoverflow.
//1st way: Thread.sleep : Less efficient compared to 2nd
try {
while (true) {//Or any Loops
//Do Something
Thread.sleep(sleeptime);//Sample: Thread.sleep(1000); 1 second sleep
}
} catch (InterruptedException ex) {
//SomeFishCatching
}
//================================== Thread.sleep
//2nd way: Object lock waiting = Most efficient due to Object level Sync.
Object obj = new Object();
try {
synchronized (obj) {
while (true) {//Or any Loops
//Do Something
obj.wait(sleeptime);//Sample obj.wait(1000); 1 second sleep
}
}
} catch (InterruptedException ex) {
//SomeFishCatching
}
//=============================== Object lock waiting
//3rd way: Loop waiting = less efficient but most accurate than the two.
long expectedtime = System.currentTimeMillis();
while (true) {//Or any Loops
while(System.currentTimeMillis() < expectedtime){
//Empty Loop
}
expectedtime += sleeptime;//Sample expectedtime += 1000; 1 second sleep
//Do Something
}
//===================================== Loop waiting
Comme Jigar l'a indiqué, vous pouvez utiliser un autre thread pour effectuer un travail qui peut fonctionner, dormir, etc. indépendamment des autres threads. La classe Java.util.Timer
peut également vous aider, car elle peut effectuer des tâches périodiques sans que vous ayez à vous lancer dans la programmation multithread.