Задержка Java / Ожидание - PullRequest
       39

Задержка Java / Ожидание

13 голосов
/ 21 декабря 2011

Как мне отложить цикл while до 1 секунды, не замедляя весь код / ​​компьютер, на котором он работает, до одной секунды (только один маленький цикл).

Ответы [ 4 ]

27 голосов
/ 21 декабря 2011

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

11 голосов
/ 21 декабря 2011

Кажется, что ваш цикл выполняется в главном потоке, и если вы выполните sleep в этом потоке, он приостановит работу приложения (поскольку имеется только один поток, который был приостановлен), чтобы преодолеть это, вы можете поместить этот код в новый Thread, который работает параллельно

try{

  Thread.sleep(1000);
}catch(InterruptedException ex){
  //do stuff
}
3 голосов
/ 05 ноября 2015

Мои простые способы отложить цикл.

Я уже разместил здесь коды после несоблюдения стандартов 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
1 голос
/ 21 декабря 2011

Как указал Jigar, вы можете использовать другой поток для выполнения работы, которая может работать, спать и т. Д. Независимо от других потоков. Класс java.util.Timer может также помочь вам, поскольку он может выполнять периодические задачи для вас, не прибегая к многопоточному программированию.

...