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).

11
demandé sur AstroCB 2011-12-21 11:00:15

4 réponses

Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)

24
répondu COD3BOY 2011-12-21 07:05:05

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
}
11
répondu Jigar Joshi 2011-12-21 07:11:02

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
2
répondu D.R.Bendanillo 2015-11-05 16:28:34

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.

1
répondu Paul Jowett 2011-12-21 07:23:59