Java Delay / Wait
Comment puis-je retarder une boucle while à des intervalles de 1 seconde sans ralentir tout le code / ordinateur qui tourne sur le délai d'une seconde (juste la petite boucle).
4 réponses
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
il semble que votre boucle tourne sur le thread principal et si vous faites sleep
sur ce thread il mettra en pause l'application (puisqu'il n'y a qu'un thread qui a été mis en pause), pour surmonter cela vous pouvez mettre ce code dans le nouveau Thread
qui tourne en parallèle
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
//do stuff
}
mes façons 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 a indiqué que vous pouvez utiliser un autre fil pour faire du travail qui peut fonctionner, dormir, etc indépendamment des autres fils. La classe java.util.Timer
pourrait vous aider aussi bien puisqu'elle peut effectuer des tâches périodiques pour vous sans que vous ayez à entrer dans la programmation multithreaded.